当我删除包含图像的托管对象时,在外部记录中存储为可转换值,然后我崩溃并出现此错误:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIImage _deleteExternalReferenceFromPermanentLocation]: unrecognized selector sent to instance 0xde49360'
答案 0 :(得分:12)
我在Apple Developer forums回答了类似的事情 我猜你在数据建模器中的那个字段上选择了外部存储复选框。
有一个错误可以解决。我是这样做的:
一旦您更新了数据并保存了上下文,任何删除它的尝试都会引发这个“无法识别的选择器”异常。
要强制可以响应_deleteExternalReferenceFromPermanentLocation消息的正确对象,请执行以下操作:
[[self managedObjectContext] refreshObject:myobject mergeChanges:NO];
对象变成了错误。当您下次访问或删除它时,外部数据将按预期删除,因为包装外部数据的正确对象将从商店中提取并正确响应_deleteExternalReferenceFromPermanentLocation。
答案 1 :(得分:2)
UIImage不响应的含义:
_deleteExternalReferenceFromPermanentLocation
...选择器,这意味着UIImage没有实现该特定方法。这似乎是Core Data用于在外部文件中存储大块数据的私有方法之一。这是仅在iOS 5中可用的功能。
在这种情况下,有两个最可能的原因:
(1)您已将UIImage对象与托管对象混淆,反之亦然,以便将针对一个类的消息发送给另一个类(这是此类错误的最常见原因。)
(2)您试图在模拟器或设备中运行早期iOS下为iOS 5编译的代码。
答案 2 :(得分:2)
我也遇到了NSDate
核心数据属性的问题。我不需要它存储在外部,但找不到任何取消设置的复选框(Xcode 4.2)。但是,当ack
为它编写时,它显然就在那里:
> ack -aiQ external Collections.xcdatamodeld
Collections.xcdatamodeld/Collections.xcdatamodel/contents
12: <attribute name="createdAt" attributeType="Date" allowsExternalBinaryDataStorage="YES" indexed="YES" syncable="YES"/>
所以我刚刚删除并重新创建了具有相同名称的属性。 allowsExternalBinaryDataStorage
XML属性消失了,崩溃也是如此。我必须在iOS 5的测试版发布期间无意中检查过某些东西,它只是卡在数据模型中,静静地等待,直到我试图删除一个对象。
无论如何,这可能会帮助其他人遇到似乎是iOS的错误,但不需要将相关属性存储在外部。