【发布时间】:2010-02-27 06:34:47
【问题描述】:
我正在尝试将搜索结果的属性列表提供给我的 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];
很高兴澄清这是否有任何意义。
【问题讨论】:
标签: python cocoa-touch search pyobjc