我正在尝试为我的iPhone应用程序提供搜索结果的属性列表。服务器是一个用Python编写的原型。在
首先,我发现了Python内置的plistlib,这太棒了。我想在您键入快照时提供搜索,所以我需要它尽可能小,而xml太大了。二进制plist格式似乎是个不错的选择。不幸的是,plistlib不处理二进制文件,所以直接使用PyObjC。在
(塞格:对于如何实现实时搜索,我非常愿意接受任何其他想法。我已经尽可能地缩减了数据,包括只显示足够的结果来填充iPhone键盘的窗口,即5。)
不幸的是,尽管我了解Python,并且对Cocoa的使用也相当不错,但我还是没有得到PyObjC。在
这就是我想做的可可粉:
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 objects dir()列表中。我也应该把列表转换成NSArray。我试过PyObjC文档,但它与我的实际工作太不相干了,所以我想我也应该试试sosos。在
^{pr2}$这就是我在iPhone上阅读plist的方式。在
NSData *data = [NSData dataWithContentsOfURL:url];
NSPropertyListFormat format;
NSString *err;
id it = [NSPropertyListSerialization
propertyListFromData:data
mutabilityOption:0
format:&format
errorDescription:&err];
很高兴澄清,如果这些都没有道理。在
正如KennyTM所说,方法名中缺少尾随的下划线。在PyObjC中,您需要使用Objective-C选择器名称(
dataWithPropertyList:format:options:error:
),并用下划线替换所有冒号(不要忘了最后一个冒号!)。这将给您dataWithPropertyList_format_options_error_
(注意后面的下划线)。另外,对于error
参数,您只需使用None
。这使得你的代码看起来像这样:如果测试结果文件,您将看到它是一个二进制PList文件,如所需:
^{pr2}$我相信正确的函数名是
因为结尾
:
。(顺便说一句,如果对象始终是数组或字典,
-writeToFile:atomically:
将已经编写plist(以XML格式)相关问题 更多 >
编程相关推荐