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]; 返回包含给定根对象的对象图编码formsNSData对象。

尝试在链接之前添加“Http://”