我需要序列化我的NSURL。
object是NSManagedObject的类型。
NSURL *objectURIRepresentation = [[object objectID] URIRepresentation];
NSError *error = nil;
NSData *objectIDData = [NSData dataWithContentsOfURL:objectURIRepresentation options:NSDataReadingMapped error:&error];
我收到错误:(可可错误256.)。
有任何想法吗?有人告诉我,使用dataWithContentsOfURL:
并不是一个好主意。
更新
另一个错误地作为评论的问题:
[NSData dataWithContentsOfURL:uri];
和[NSKeyedArchiver archivedDataWithRootObject:uri];
之间的区别是什么?
感谢。
答案 0 :(得分:4)
如前所述Cocoa error 256 core data
在读取资源时发生未知错误或路径中包含某些编码字符时,可能会出现错误代码256。
在我看来,您正试图从NSManagedObject
获取数据。因此,@ fluchtpunkt建议你应该寻找http://cocoawithlove.com/2008/08/safely-fetching-nsmanagedobject-by-uri.html
现在回到第二个问题[NSData dataWithContentsOfURL:uri];
会返回文档目录中的网址或本地资源的数据。 [NSKeyedArchiver archivedDataWithRootObject:uri];
会返回包含编码形式的对象图的NSData
对象,该对象的根对象已被赋予。
答案 1 :(得分:4)
首先,您的代码不会尝试序列化NSURL对象,它会尝试从作为托管对象的URI返回的URL处的数据中创建数据对象。
其次,这永远不会奏效。
[NSData dataWithContentsOfURL:]
会尝试读取特定网址的文件。托管对象的URI表示一个对象,该对象存储在像SQLite数据库这样的持久文件中的许多其他对象中。
URI仅允许托管对象上下文标识其自己的商店中的特定对象。对于除上下文之外的任何其他内容,URI都是乱码。
NSManagedObject未实现NSCoder协议,因此无法序列化托管对象。我不确定你想在这做什么,但你不能这样做。
答案 2 :(得分:2)
尝试在链接
之前添加“Http://”