7

外部レコードに変換可能な値として保存されているイメージを含む管理対象オブジェクトを削除すると、クラッシュして次のエラーが発生しました。

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

3 に答える 3

12

Apple Developer forumsで同様の質問に回答しました。
データモデラーのそのフィールドで外部ストレージチェックボックスが選択されていると思います。

回避できるバグがあります。私はこのようにしました:
データを更新してコンテキストを保存すると、それを削除しようとすると、この「認識されないセレクター」例外が発生します。
_deleteExternalReferenceFromPermanentLocation メッセージに応答できる正しいオブジェクトを強制するには、次のようにします。

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

オブジェクトはフォルトになります。次にアクセスまたは削除すると、外部データをラップする正しいオブジェクトがストアからプルされ、_deleteExternalReferenceFromPermanentLocation に正しく応答するため、外部データは期待どおりに削除されます。

于 2011-11-03T20:27:51.267 に答える
2

NSDate私もコアデータ属性でこの問題に遭遇しました。外部に保存する必要はありませんが、設定を解除するチェックボックスが見つかりませんでした(Xcode4.2)。しかし、私がそれをack編集したとき、それは明らかにそこにありました:

> ack -aiQ external Collections.xcdatamodeld
Collections.xcdatamodeld/Collections.xcdatamodel/contents
12:        <attribute name="createdAt" attributeType="Date" allowsExternalBinaryDataStorage="YES" indexed="YES" syncable="YES"/>

そのため、同じ名前でその属性を削除して再作成しました。allowsExternalBinaryDataStorageXML属性がなくなり、クラッシュしました。iOS 5のベータリリースなどでうっかりチェックしてしまったのに、データモデルに引っかかって、オブジェクトを削除しようとするまで静かに待っていたに違いありません。

とにかく、おそらくこれは、iOSのバグのように見えるが、問題の属性を外部に保存する必要がない他の人々を助けるでしょう。

于 2012-02-24T05:46:44.100 に答える
2

これは、UIImage が以下に応答しないことを意味します。

_deleteExternalReferenceFromPermanentLocation

…セレクターは、UIImage がその特定のメソッドを実装していないことを意味します。これは、外部ファイルに大量のデータを格納するために Core Data が使用するプライベート メソッドの 1 つと思われます。これは iOS 5 でのみ使用できる機能です。

この場合、最も可能性の高い原因が 2 つあります。

(1) UIImage オブジェクトと管理対象オブジェクトを混同したり、その逆を行ったりして、あるクラス向けのメッセージが別のクラスに送信された (これが、このクラスのエラーの最も一般的な原因です)。

(2) シミュレータまたはデバイスのいずれかで、以前の iOS で iOS 5 用にコンパイルされたコードを実行しようとしています。

于 2011-10-29T16:36:10.590 に答える