0

NSDataオブジェクトをCoreDataに挿入しようとしています。そのため、coredataを選択して開始したことがないため、事後にすべてをアプリケーションに追加する必要がありました。新しいプロジェクトを開始し、適切なコードをすべてコピーしてすべてをセットアップしたので、それでも問題ありません。

そこから、insertNewObjectメソッドを設定しようとしています。しかし、これは私にいくつかの問題を与えています。

私はまず、このような別のメソッドからNSDataを渡そうとしています。

[self insertNewObject:myData];

次に、このようなinsertNewObjectメソッドを使用しています

- (void)insertNewObject:(id)sender
{
    NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext];
    NSEntityDescription *entity = [[self.fetchedResultsController fetchRequest] entity];
    NSManagedObject *newManagedObject = [NSEntityDescription insertNewObjectForEntityForName:@"Entity" inManagedObjectContext:context];

    // If appropriate, configure the new managed object.
    // Normally you should use accessor methods, but using KVC here avoids the need to add a custom class to the template.
    [newManagedObject setValue:sender forKey:@"manufacturers"]; //not sure if this is correct, but sender has myData, and @"manufactures" is the attribute of my entity.

    // Save the context.
    NSError *error = nil;
    if (![context save:&error]) {
        // Replace this implementation with code to handle the error appropriately.
        // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. 
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }
}

ここから何が起こるかというと、スレッドが3行目「NSManagedObject * newManagedObject ...」を取得しすぎると、アプリケーションがクラッシュし、このエラーが発生します。

> 2012-04-27 11:18:21.579 thecode[1452:fb03] *** Terminating app due to
> uncaught exception 'NSInternalInconsistencyException', reason:
> '+entityForName: could not locate an NSManagedObjectModel for entity
> name 'Entity''
> *** First throw call stack: (0x14b5022 0x1952cd6 0x61d47 0xa8102 0x1a595 0x199a4 0x18b99 0x15097 0x1136a49 0x1134e84 0x1135ea7
> 0x1134e3f 0x1134fc5 0x1079f5a 0x1c02a39 0x1ccf596 0x1bf9120 0x1ccf117
> 0x1bf8fbf 0x148994f 0x13ecb43 0x13ec424 0x13ebd84 0x13ebc9b 0x215b7d8
> 0x215b88a 0x733626 0x762d 0x1c75 0x1) terminate called throwing an
> exception

xcdatamodeld内でこれに必要なエンティティと属性を設定しました

どんな助けでも大歓迎です。

4

2 に答える 2

2

CoreDataモデルを認識していませんが、「Entity」という名前のエンティティがないため、「Entity」という名前の新しいエンティティをここに挿入しようとすると、クラッシュが発生する可能性があります。

[NSEntityDescription insertNewObjectForEntityForName:@"Entity" inManagedObjectContext:context];

1行上のエンティティの説明を取得していますが、後で使用することはないため、このエンティティを挿入しようとしていると思います。したがって、基本的には次のことを行う必要があります。

    [NSEntityDescription insertNewObjectForEntityForName:entity.name inManagedObjectContext:context];

お役に立てれば!

于 2012-04-26T23:41:18.270 に答える
1

また、managedObjectContext が nil でないことを確認してください。まさにこのエラーが発生します。fetchedResultsController をインスタンス化したときに、NSManagedObjectContext を関連付けました。その文脈はどこから得たのですか?

これがドリルダウンしたビュー コントローラー内にある場合は、アプリ デリゲートから後続の各コントローラーに managedObjectContext を渡して、すべてのコントローラーがアクセスできるようにしてください。その後、それを fetchedResultsController に正しく渡すことができます。

于 2012-04-27T02:25:06.717 に答える