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

7

当我删除一个包含图像的托管对象时,该图像被存储为外部记录中的可转换值,然后我会遇到崩溃和以下错误:

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

12

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

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

[[self managedObjectContext] refreshObject:myobject mergeChanges:NO];
对象变成了一个故障。下次访问或删除它时,外部数据将按预期被删除,因为正确包装外部数据的对象将从存储中提取,并正确响应 _deleteExternalReferenceFromPermanentLocation。

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


这对于“二进制数据”Core Data类型(勾选了“允许外部存储”)也是一个问题吗,还是只是“可转换”的问题? - Hope4You

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 的一个 beta 版本中不经意地勾选了什么东西,它就被卡在数据模型中,悄悄地等待我尝试删除一个对象。
总之,也许这对于遇到看起来像是 iOS bug 但不需要将相关属性存储在外部的其他人会有所帮助。

2
这意味着UIImage无法响应以下内容:
_deleteExternalReferenceFromPermanentLocation

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

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

(1) 您混淆了UIImage对象和托管对象,或者反之,导致一个消息被发送到另一个类(这是这类错误最常见的原因)。

(2) 您正在尝试在模拟器或设备上运行为iOS 5编译的代码,而早期版本的iOS则不支持。


我有一个可转换的属性,通过NSValueTransformer存储UIImage... 据我所知,我需要将此属性更改为NSData以避免出现此错误消息。 - Shmidt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接