4

私は 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

誰もこれまでにこのようなことに遭遇したことがありますか? 私はすべてのターゲットをきれいにし、すべてを再起動しようとしましたが、モデルを問題の関係に変更することさえ、対多ではなく対1です。何も違いはありません。

4

1 に答える 1

1

メモリアドレス「ポインタ」にあると予想されるオブジェクトが別のものに置き換えられた状況で、以前に「認識されないセレクタがインスタンス 0x に送信されました...」というエラーが発生しました。この状況を考えてみましょう:

NSAutoReleasePool *pool = [[NSAutoReleasePool alloc] init];
NSString *someString = [NSString stringWithString:@"some string"]; // 自動解放されたオブジェクトが返される

[プールドレイン];
[プール解放];

/*
他のコードが実行される
*/

// someString 変数の背後にある文字列はこの時点で自動解放されているため、someString が指すメモリは他のデータ型によって占有されている可能性があります。以下は EXC_BAD_ACCESS エラーを介して発生するか、そのメモリ空間を占有しているものに対してセレクターを実行しようとする可能性があります
int stringLength = [文字列の長さ];

この例は非常に単純であり、私のセマンティクスはここでは少しずれている可能性がありますが、これがあなたのケースでより複雑な方法で起こっている可能性はありますか? 多分試してください:

[[NSEntityDescription insertNewObjectForEntityForName:@"entityName" inManagedObjectContext:managedObjectContext] 保持]

何が起こるか見てみましょう。

于 2010-04-29T21:14:39.897 に答える