7

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

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

3 回答 3

12

我在Apple Developer 论坛中回答了类似的问题。
我猜您在数据建模器的该字段上选中了外部存储复选框。

有一个可以解决的错误。我是这样做的:
一旦您更新了数据并保存了上下文,任何删除它的尝试都会引发这个“无法识别的选择器”异常。
要强制可以响应 _deleteExternalReferenceFromPermanentLocation 消息的正确对象,请执行以下操作:

[[self managedObjectContext] refreshObject:myobject mergeChanges:NO];

对象变成故障。当您下次访问或删除它时,外部数据将按预期删除,因为将从存储中提取包装外部数据的正确对象,并将正确响应 _deleteExternalReferenceFromPermanentLocation。

于 2011-11-03T20:27:51.267 回答
2

这意味着 UIImage 不响应:

_deleteExternalReferenceFromPermanentLocation

…选择器,这意味着 UIImage 没有实现该特定方法。这似乎是 Core Data 用来在外部文件中存储大量数据的私有方法之一。这是仅在 iOS 5 中可用的功能。

在这种情况下,最可能的原因有两个:

(1) 您将 UIImage 对象与托管对象混淆了,反之亦然,以至于将用于一个类的消息发送到另一个类(这是此类错误的最常见原因。)

(2) 您试图在模拟器或设备中运行为早期 iOS 下的 iOS 5 编译的代码。

于 2011-10-29T16:36:10.590 回答
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"/>

所以我只是删除并重新创建了具有相同名称的属性。XML 属性消失了,allowsExternalBinaryDataStorage我的崩溃也消失了。我一定是在 iOS 5 的 beta 版本中不经意地检查了一些东西,然后它就卡在了数据模型中,静静地等待着,直到我试图删除一个对象。

无论如何,也许这会帮助其他遇到看似 iOS 错误但不需要将相关属性存储在外部的人。

于 2012-02-24T05:46:44.100 回答