当我删除一个包含图像的托管对象时,该图像被存储为外部记录中的可转换值,然后我会遇到崩溃和以下错误:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIImage _deleteExternalReferenceFromPermanentLocation]: unrecognized selector sent to instance 0xde49360'
当我删除一个包含图像的托管对象时,该图像被存储为外部记录中的可转换值,然后我会遇到崩溃和以下错误:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIImage _deleteExternalReferenceFromPermanentLocation]: unrecognized selector sent to instance 0xde49360'
我在Apple开发者论坛中回答了类似的问题。
我猜你在数据建模器中选择了该字段上的外部存储复选框。
存在一个可以解决的错误。我是这样做的:
一旦您更新了数据并保存了上下文,任何尝试删除它的操作都会引发此“未识别的选择器”异常。
为了强制正确的对象来响应 _deleteExternalReferenceFromPermanentLocation 消息,请执行以下操作:
[[self managedObjectContext] refreshObject:myobject mergeChanges:NO];
对象变成了一个故障。下次访问或删除它时,外部数据将按预期被删除,因为正确包装外部数据的对象将从存储中提取,并正确响应 _deleteExternalReferenceFromPermanentLocation。
对象变成了一个故障。下次访问或删除它时,外部数据将按预期被删除,因为正确包装外部数据的对象将从存储中提取,并正确响应_deleteExternalReferenceFromPermanentLocation。
我也遇到了这个问题,我的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 的一个 beta 版本中不经意地勾选了什么东西,它就被卡在数据模型中,悄悄地等待我尝试删除一个对象。_deleteExternalReferenceFromPermanentLocation
...选择器,这意味着UIImage没有实现该特定方法。这似乎是Core Data用于将大块数据存储在外部文件中使用的私有方法之一。这是仅在iOS 5中可用的功能。
在这种情况下,有两个最可能的原因:
(1) 您混淆了UIImage对象和托管对象,或者反之,导致一个消息被发送到另一个类(这是这类错误最常见的原因)。
(2) 您正在尝试在模拟器或设备上运行为iOS 5编译的代码,而早期版本的iOS则不支持。