NSURL到NSData(cocoa错误256)
我需要序列化我的NSURL。
对象是NSManagedObject的types。
NSURL *objectURIRepresentation = [[object objectID] URIRepresentation]; NSError *error = nil; NSData *objectIDData = [NSData dataWithContentsOfURL:objectURIRepresentation options:NSDataReadingMapped error:&error];
我得到错误:(cocoa错误256)。 有任何想法吗? 有些东西告诉我,使用dataWithContentsOfURL:
不是个好主意。
更新
还有一个问题是错误地提出来的:
[NSData dataWithContentsOfURL:uri];
之间的区别是什么? 和[NSKeyedArchiver archivedDataWithRootObject:uri];
?
谢谢。
首先,你的代码不会尝试序列化一个NSURL对象,它会尝试从作为被pipe理对象的URI返回的URL中的数据中创build一个数据对象。
其次,这是永远不会工作的。
[NSData dataWithContentsOfURL:]
将尝试读取特定URL的文件。 一个托pipe对象的URI表示一个对象,像一个SQLite数据库一样存储在一个持久性文件中的许多其他项目中。
URI只允许托pipe对象上下文在自己的存储中标识特定的对象。 对于上下文以外的任何其他内容,URI都是乱码。
NSManagedObject不实现NSCoder协议,因此pipe理的对象不能被序列化。 我不确定你想在这里做什么,但你不能这样做。
正如这里提到的cocoa错误256核心数据
在读取资源时发生未知错误或者path中有一些编码字符时,可能会出现错误代码256。
在我看来,你正试图从NSManagedObject
获取数据。 因此@fluchtpunktbuild议你应该寻找http://cocoawithlove.com/2008/08/safely-fetching-nsmanagedobject-by-uri.html
现在来到你的第二个问题[NSData dataWithContentsOfURL:uri];
返回您的文档目录中的url或本地资源的数据。 而[NSKeyedArchiver archivedDataWithRootObject:uri];
返回包含给定根对象的对象图的编码forms的NSData
对象。
尝试在链接之前添加“Http://”