尝试从Python(w / PyObjC)写入二进制plist格式,以便由Cocoa Touch读取和读取
作者:互联网
我正在尝试将搜索结果的属性列表提供给我的iPhone应用程序.服务器是一个用Python编写的原型.
首先,我发现了Python的内置plistlib,非常棒.我想给你一个搜索类型的镜头,所以我需要它尽可能小,而xml太大了.二进制plist格式似乎是一个不错的选择.不幸的是,plistlib没有做二进制文件,所以一步到位PyObjC.
(Segue:我对如何完成实时搜索的任何其他想法都非常开放.我已经尽可能地减少了数据,包括只显示足够的结果来填充iPhone键盘的窗口,这是5.)
不幸的是,虽然我知道Python并且使用Cocoa变得相当不错,但我仍然没有得到PyObjC.
这是Cocoa相当于我想要做的事情:
NSArray *plist = [NSArray arrayWithContentsOfFile:read_path];
NSError *err;
NSData *data = [NSPropertyListSerialization dataWithPropertyList:plist
format:NSPropertyListBinaryFormat_v1_0
options:0 // docs say this must be 0, go figure
error:&err];
[data writeToFile:write_path atomically:YES];
我以为我应该可以这样做,但dataWithPropertyList不在NSPropertyListSerialization对象的dir()列表中.我也应该将列表转换为NSArray.我尝试了PyObjC文档,但它与我的实际工作非常相似,我认为我也尝试过SO SOS.
from Cocoa import NSArray, NSData, NSPropertyListSerialization, NSPropertyListBinaryFormat_v1_0
plist = [dict(key1='val', key2='val2'), dict(key1='val', key2='val2')]
NSPropertyListSerialization.dataWithPropertyList_format_options_error(plist,
NSPropertyListBinaryFormat_v1_0,
?,
?)
这就是我在iPhone上阅读plist的方式.
NSData *data = [NSData dataWithContentsOfURL:url];
NSPropertyListFormat format;
NSString *err;
id it = [NSPropertyListSerialization
propertyListFromData:data
mutabilityOption:0
format:&format
errorDescription:&err];
很高兴澄清这些是否有意义.
解决方法:
我相信正确的函数名称是
NSPropertyListSerialization.dataWithPropertyList_format_options_error_
因为结局:.
(顺便说一句,如果对象总是数组或字典,-writeToFile:atomically:将编写plist(作为XML格式).)
标签:pyobjc,python,search,cocoa-touch 来源: https://codeday.me/bug/20190827/1741491.html