错误: - [UIImage _deleteExternalReferenceFromPermanentLocation]无法识别的选择器发送到实例

时间:2011-10-28 14:16:36

标签: core-data ios5 transformable

当我删除包含图像的托管对象时,在外部记录中存储为可转换值,然后我崩溃并出现此错误:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIImage _deleteExternalReferenceFromPermanentLocation]: unrecognized selector sent to instance 0xde49360' 

3 个答案:

答案 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的错误,但不需要将相关属性存储在外部。