Core data 错误:-[UIImage\U deleteExternalReferenceFromPermanentLocation]已将无法识别的选择器发送到实例

Core data 错误:-[UIImage\U deleteExternalReferenceFromPermanentLocation]已将无法识别的选择器发送到实例,core-data,ios5,transformable,Core Data,Ios5,Transformable,当我删除一个包含图像的托管对象时,该图像作为可转换值存储在外部记录中,然后出现崩溃和以下错误: Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIImage _deleteExternalReferenceFromPermanentLocation]: unrecognized selector sent to instance 0xde49360' 表示UIImage不响

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

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

表示UIImage不响应以下命令:

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

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

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


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

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

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

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

物体变成了断层。下次访问或删除外部数据时,会按预期删除外部数据,因为包装外部数据的正确对象将从存储中取出,并正确响应“deleteExternalReferenceFromPermanentLocation”。

我也遇到了这个问题,使用了
NSDate
核心数据属性。我不需要将其存储在外部,但找不到任何要取消设置的复选框(Xcode 4.2)。然而,当我为它确认时,它显然在那里:

> ack -aiQ external Collections.xcdatamodeld
Collections.xcdatamodeld/Collections.xcdatamodel/contents
12:        <attribute name="createdAt" attributeType="Date" allowsExternalBinaryDataStorage="YES" indexed="YES" syncable="YES"/>
>ack-aiQ external Collections.xcdatamodeld
Collections.xcdatamodeld/Collections.xcdatamodel/contents
12:        
所以我只是删除并重新创建了同名的属性。
allowexternalbinarydatastorage
XML属性消失,我的崩溃也消失了。我一定是在iOS 5测试版或其他版本中无意中检查了一些东西,它只是卡在数据模型中,静静地等待,直到我尝试删除一个对象


不管怎么说,这可能会帮助那些遇到iOS bug但不需要将相关属性存储在外部的人。

我有一个可转换属性,通过NSValueTransformer存储UIImage。。。据我所知,我需要将此属性更改为NSData以避免此错误消息这也是“二进制数据”核心数据类型(选中“允许外部存储”)的问题,还是仅“可转换”的问题?