【问题标题】:NSURL into NSData (Cocoa error 256.)NSURL 到 NSData(可可错误 256。)
【发布时间】:2011-07-03 11:48:47
【问题描述】:

我需要序列化我的 NSURL。

object 是 NSManagedObject 的类型。

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]; 有什么区别?

谢谢。

【问题讨论】:

  • NSManagedObject != NSData。和cocoawithlove.com/2008/08/…
  • [NSData dataWithContentsOfURL:uri];[NSKeyedArchiver archivedDataWithRootObject:uri];有什么区别?

标签: iphone ios core-data


【解决方案1】:

这里提到Cocoa error 256 core data
当读取资源时发生未知错误或路径中有一些编码字符时,可能会出现错误代码 256。

在我看来,您正试图从NSManagedObject 获取数据。因此,正如@fluchtpunkt 建议的那样,您应该寻找http://cocoawithlove.com/2008/08/safely-fetching-nsmanagedobject-by-uri.html

现在来回答您的第二个问题[NSData dataWithContentsOfURL:uri]; 在您的文档目录中返回 Web url 或本地资源的数据。而[NSKeyedArchiver archivedDataWithRootObject:uri]; 返回的NSData 对象包含对象图的编码形式,其根对象已给出。

【讨论】:

  • 谢谢。最后,第二个问题/答案是正确的。
【解决方案2】:

首先,您的代码不会尝试序列化 NSURL 对象,它会尝试从作为托管对象的 URI 返回的 URL 处的数据创建数据对象。

其次,这永远行不通。

[NSData dataWithContentsOfURL:] 将尝试读取位于特定 URL 的文件。托管对象的 URI 表示一个对象,它与许多其他对象一起存储在一个持久文件(如 SQLite 数据库)中。

URI 仅允许托管对象上下文在其自己的存储中标识特定对象。 URI 对于除上下文之外的任何其他内容都是乱码。

NSManagedObject 没有实现 NSCoder 协议,因此无法序列化托管对象。我不确定你想在这里做什么,但你不能这样做。

【讨论】:

  • "[NSData dataWithContentsOfURL:] 将尝试读取特定 URL 的文件。" - 谢谢这句话。我现在完全明白了。我只是不能存储 NSManagedObject,所以我存储了它的 ID。
  • 在使用托管对象 ID 时要注意一个主要问题。真正的固定 ID 仅在对象被持久化到存储时(即在上下文保存之后)生成。在此之前,对象 ID 只是临时的,并且会在保存后更改。因此,请务必在捕获其 ID 以在上下文之外使用之前保存对象。
  • @TechZen 那么如何获取这个的 NSData 呢?
【解决方案3】:

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

【讨论】:

  • 这对我有帮助。如此愚蠢的错误简直不敢相信!
猜你喜欢
  • 1970-01-01
  • 2017-03-08
  • 2016-11-15
  • 2017-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-23
  • 1970-01-01
相关资源
最近更新 更多