2012-11-05 122 views
1

我有1個待辦事項對象,我正在創建1個報告對象。它們都是NSManagedObject創建的同一個NSManagedObjectContext的不同MOC。爲了說清楚,NSManagedObjectContext是來自我的PersistenceStore類的ivar。無法建立關係NSManagedObjects

ToDo對象來自一個數組,該數組繼承自PersistenceStore中的方法,該方法返回保存在NsPresistentStoreCoordinator中的對象的數組。待辦事項對象作爲屬性傳遞給我應該初始化報告的類。

報告類是從PersistenceStorage NSManagedObject與此代碼線MOC初始化:

NSManagedObjectContext *context = [store managedObjectContext]; 
Report *report = [NSEntityDescription insertNewObjectForEntityForName:@"Report" inManagedObjectContext:context]; 

待辦事項和報告的對象有關係之一 - - 之一。但是,一個我嘗試設置我得到了錯誤的關係

< \ NSInvalidArgumentException>非法嘗試建立在不同的上下文

在我心目中,我使用相同的NSManagedObjectContext對象之間的關係「待辦事項」 。有人可以幫助我嗎?另一實體的

回答

1

查找方面:

NSManagedObjectContext *context = [store managedObjectContext]; 

NSManagedObject *ctx = [context existingObjectWithID:[todo objectID] error:&error]; 
Report *report = [NSEntityDescription insertNewObjectForEntityForName:@"Report" inManagedObjectContext:ctx]; 
+0

你可能是說'ctx'是一個'NSManagedObjectContext'而不是'NSManagedObject'? – lagos

+0

我修好了。我使用你的解決方案的一部分: 報告對象也有其他關係,但與原來的上下文,所以如果我有使用你的解決方案,我得到了與其他關係的問題。然後解決方案是 'NSManagedObjectContext * context = [store managedObjectContext]; Report * report = [NSEntityDescription insertNewObjectForEntityForName:@「Report」inManagedObjectContext:context]; NSManagedObject * object = [context objectRegisteredForID:[currentTodo objectID]]; [report setTodo:((ToDo *)object)]; ' – lagos

0

我找到了解決辦法。我使用了NeverBe的部分答案。

NSManagedObjectContext *context = [store managedObjectContext]; 
Report *report = [NSEntityDescription insertNewObjectForEntityForName:@"Report" inManagedObjectContext:context]; 
NSManagedObject *object = [context objectRegisteredForID:[currentTodo objectID]]; 
[report setTodo:((ToDo*) object)]; 

我之所以沒有使用NeverBe的答案是因爲Report對象在同一個上下文中有其他關係。如果我複製Todo對象的上下文,我會遇到與其餘關係相同的問題。