处理 NSPropertyListSerialization 中的 CFNull 对象
在我的应用程序中,我尝试序列化服务器响应字典并将其写入文件系统。但对于某些响应,我收到错误“属性列表格式无效”。原因是服务器响应中的 CFNull 对象。现在,服务器响应将不断变化,因此我没有明确的方法来删除 CFNull 对象 ()。下面是我的代码:
NSString *anError = nil;
NSData *aData = [NSPropertyListSerialization dataFromPropertyList:iFile format:NSPropertyListXMLFormat_v1_0 errorDescription:&anError];
解决这个问题的最佳方法是什么?如何一次性从服务器响应中删除所有 CFNull 对象?
In my application, I am trying to serialize a server response dictionary and writing it to file system. But I am getting error "Property list invalid for format" for some responses. The reason is CFNull objects in the server response. Now, the server response will keep on changing so I do not have a definite way to remove CFNull objects (). Below is my code:
NSString *anError = nil;
NSData *aData = [NSPropertyListSerialization dataFromPropertyList:iFile format:NSPropertyListXMLFormat_v1_0 errorDescription:&anError];
What is the best way to tackle this issue? How can I remove all CFNull objects from server response in one shot?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
我在接收来自 Facebook SDK 的响应时遇到了这个问题,所以我实现了这个方法:
}
这将遍历字典的层次结构并将所有 CFNull 转换为空字符串。
I had this problem with receiving a response from the Facebook SDK, so I implemented this method:
}
That'll walk the hierarchy of the dictionary and turn all CFNulls into the empty string.
我切换到 NSKeyedArchiver 选项。比 NSPropertyListSerialization 慢一点,但可以处理 NSNull/CFNull 对象。
I switched to NSKeyedArchiver option. Little slower than NSPropertyListSerialization but takes care of NSNull/CFNull objects.
我写了一个类别来清理字典:
I wrote a Category to clean up a dictionary :
如果您无法通过
datafromPropertyList:...
API 序列化它,那么它就不是属性列表。要么修复服务器响应以生成正确的属性列表,要么修改应用程序中的数据,以便可以将其正确解释为属性列表。
If you can't serialize it via the
datafromPropertyList:...
API, then it isn't a property list.Either fix the server responses to barf up proper property lists or massage the data in your app such that it can be properly interpreted as a property list.