NSURL转换为NSData(Cocoa错误256.)

时间:2011-02-24 11:07:50

标签: iphone ios core-data

我需要序列化我的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];之间的区别是什么?

感谢。

3 个答案:

答案 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://”