2

Context が 1 つあり、Context 内の既存のオブジェクト(Veranstaltung)と新しいオブジェクト(Ticket)の間の関係を作成したいと考えています。

 NSManagedObjectContext *managedObjectContext = [self managedObjectContext]; //constructor get the Context from the appDelegate

Ticket *ticket = [NSEntityDescription insertNewObjectForEntityForName:@"Ticket" inManagedObjectContext:managedObjectContext];

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Veranstaltung" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"vID == %@", veranstaltung.vID];
[fetchRequest setPredicate:predicate];
NSError *error = nil;

NSArray *fetchedRequests = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
NSLog(@"FetchedRequests count: %d", fetchedRequests.count);

if(fetchedRequests !=nil)
   [ticket setEvent:fetchedRequests[0]];

そして、イベントの設定中にアプリがクラッシュします.. 誰かアイデアがありますか? ありがとうございました!

4

1 に答える 1

-1

Ticketエラー メッセージから、Core Data はとVeranstaltungが異なるコンテキストにあると感じているようです。コードの最初の数行を見ると...

[self managedObjectContext]; //constructor get the Context from the appDelegate

Ticket *ticket = [NSEntityDescription insertNewObjectForEntityForName:@"Ticket" inManagedObjectContext:managedObjectContext];

これらの行の 1 つで何かを書き忘れたようです。その結果managedObjectContext、2 行目はあなたの考えとは異なります。おそらく次のいずれかを意味していました。

NSManagedObjectContext *managedObjectContext = [self managedObjectContext]; //constructor get the Context from the appDelegate

またはそうでなければ:

Ticket *ticket = [NSEntityDescription insertNewObjectForEntityForName:@"Ticket" inManagedObjectContext:[self managedObjectContext]];

そのままでは、結果が破棄されるため、最初の行は何の役にも立ちません。context2 行目を 3 行目の後に配置し、 3 行目のローカル変数をどこでも使用することをお勧めします。

于 2013-04-24T17:02:34.540 に答える