9

私は CoreData に比較的精通しており、数年間ほとんどまたはまったく問題なく使用しています。一生、理由が分からない

insertNewObjectForEntityForName:inManagedObjectContext:

NSNumber のある種の奇妙なインスタンスが突然返されます。GDB は、返されたオブジェクトが NSManagedObject の正しいカスタム サブクラスのものであると言いますが、NSManagedObject 自体の説明を出力しようとすると、次のエラーが発生します。

*** -[NSCFNumber objectID]: unrecognized selector sent to instance 0x3f26f50

さらに奇妙なのは、setValue:forKey: を使用していくつかの関係と属性を設定できることです。すべて問題ありません。しかし、特定の関係を設定しようとすると、次のエラーが発生します。

*** -[NSCFNumber entity]: unrecognized selector sent to instance 0x3f26f50

すべてのターゲットをクリーンアップすることから、Mac と iPhone の両方を再起動することまで、問題の関係が対多ではなく対 1 になるようにモデルを編集することまで、あらゆることを試しました。何をしても同じ問題が発生します。誰もこれまでにこのようなものを見たことがありますか?

4

4 に答える 4

14

まったく同じ問題がありました。「データベース」という名前の関係を持つデータベースエンティティの親エンティティに、「isDatabase」(BOOL を返す) というメソッドを追加しました。「isDatabase」の名前を「isOfTypeDatabase」に変更すると、問題が修正されました。そのため、親エンティティも調べてください。

于 2012-11-23T11:49:16.780 に答える
2

NSManagedObjectクラスで定義された関係の名前と衝突するサブクラスでプロパティを定義しました。

これが私のコードですMyManagedObjectSubclass+Custom.h

@property (readonly, nonatomic) BOOL isSeason;

MyManagedObjectSubclass.h の XCode によって生成されたコードは次のとおりです。

@property (nonatomic, retain) SomeOtherEntityToOneRelationship *season;

isSeason、KVC によって、シーズン名と衝突することに注意してください

于 2013-01-05T19:23:54.373 に答える
1

私はまったく同じ問題に遭遇し、一日中髪を抜いた後、問題を解決しました.

問題は破損した属性/関係に関連していると思います.NSCFNumberは実際にはその属性/関係のオブジェクトIDを探しています. 私の場合、valueForKey: を使用してすべての属性/関係を見つけることができましたが、「ファイル」と呼んでいた関係が壊れているように見えました。

ブール値の「isFile」メソッドを含めるように NSObject を拡張したことに最終的に気付きました。何らかの形でこれが CoreData に干渉し、破損したオブジェクトを返すか、オブジェクトを適切に処理できなくなっていました。私の推測では、CoreData は「isXXX」メソッドを動的に作成する必要があります。

isFile メソッドを削除するか、プロパティの名前を変更することで問題を解決できます。

于 2011-11-08T20:58:38.987 に答える
0

objectID およびエンティティ セレクターは onNSManagedObjectであり、not NSCFNumber(またはNSNumber) です。NSNumberエンティティ自体ではなく、エンティティのプロパティである必要があるこれらのセレクターのいずれかを呼び出すとは思いません。

CoreData のすべてのエンティティは拡張する必要がNSManagedObjectあるため、NSCFNumberオブジェクトはエンティティではありません。

于 2011-01-27T04:42:00.500 に答える