2013-04-24 26 views
2

我有一個上下文,我想創建上下文中的現有對象(Veranstaltung)和新的對象之間的關係(門票)單個上下文但「非法嘗試在不同上下文中的對象之間建立關係'xyz'

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]]; 

而且在設置事件,在App crashs .. 得到任何人的想法?謝謝!

+1

錯誤中提到的是什麼關係?它實際上不是「xyz」,是嗎? – Caleb 2013-04-24 17:19:25

+0

啊每次我都沒有提到,這不是「票」,它的「gekauftesTicket」,「票」反向「Veranstaltung」 – Jonathan 2013-04-24 17:24:45

+0

@Jonathan你是如何解決你的問題? – SAHM 2013-11-28 15:03:54

回答

0

從錯誤信息,核心數據似乎感覺到TicketVeranstaltung在不同的情況下。綜觀代碼的前幾行...

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

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

看起來你遺漏了某些東西在這些線路之一,結果是managedObjectContext在第二行是不是你的想法。你大概意思之一:

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

要不然:

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

因爲它是,第一條線沒有做任何有用的東西,因爲結果被丟棄。我建議在第三行之後放置第二行,並且使用來自第三行的局部變量context

+0

哦,我是sry,我忘了說,之前managedObjectContext已初始化(我試圖將它縮短爲sry) – Jonathan 2013-04-24 17:08:17

+0

那麼爲什麼你需要'managedObjctContext'和'context'局部變量?如果這真的是你的代碼的樣子,那麼它們都指向相同的上下文。如果你的真實代碼不同,那麼他們有可能指向不同的上下文,這會解釋錯誤。使用單個本地上下文指針來處理'ticket'和你的讀取請求消除了上下文不同的可能性。 – Caleb 2013-04-24 17:13:49

+0

是的,你說得對,好點。我用managedObjectContext替換了上下文,但這並不能解決問題 – Jonathan 2013-04-24 17:16:58

相關問題