我有一個NSManagedObject
斯科特從NSManagedObjectContext
context1中獲取。我也有從NSManagedObjectContext
context2獲取的同一個Scott。在另一個上下文中更新核心數據實體
我知道如果我從相同的上下文中獲取它們,如果一個更新了,另一個也會更新,但是我目前的結構不會輕易讓我傳遞相同的上下文。我想知道是否有另一種方式,與KVO有關。
當我在context1中對人Scott進行更改時,能否更新context2中的Person Scott?
編輯:
嘗試測試:
NSError *error = nil;
NSManagedObjectContext *context = [NSManagedObjectContext MR_context];
NSManagedObjectContext *context2 = [NSManagedObjectContext MR_context];
Boundary *boundary1 = [Boundary MR_findFirstInContext:context];
DLog(@"boundary1.name: %@", boundary1.name);
DLog(@"boundary1.managedObjectContext: %@", boundary1.managedObjectContext);
Boundary *boundary2 = (Boundary *)[context2 existingObjectWithID:boundary1.objectID error:&error];
DLog(@"boundary2.name: %@", boundary2.name);
DLog(@"boundary2.managedObjectContext: %@", boundary2.managedObjectContext);
boundary1.name = @"new name";
// Added this, does not change results
[context2 MR_observeContext:context];
DLog(@"boundary1.name: %@", boundary1.name);
DLog(@"boundary1.managedObjectContext: %@", boundary1.managedObjectContext);
DLog(@"boundary2.name: %@", boundary2.name);
DLog(@"boundary2.managedObjectContext: %@", boundary2.managedObjectContext);
結果:
DEBUG | -[LoginViewController viewDidLoad] | boundary1.name: 997677
DEBUG | -[LoginViewController viewDidLoad] | boundary1.managedObjectContext: <NSManagedObjectContext: 0x1cdc6b20>
DEBUG | -[LoginViewController viewDidLoad] | boundary2.name: 997677
DEBUG | -[LoginViewController viewDidLoad] | boundary2.managedObjectContext: <NSManagedObjectContext: 0x1cdd7930>
DEBUG | -[LoginViewController viewDidLoad] | boundary1.name: new name
DEBUG | -[LoginViewController viewDidLoad] | boundary1.managedObjectContext: <NSManagedObjectContext: 0x1cdc6b20>
DEBUG | -[LoginViewController viewDidLoad] | boundary2.name: 997677
DEBUG | -[LoginViewController viewDidLoad] | boundary2.managedObjectContext: <NSManagedObjectContext: 0x1cdd7930>
到boundary1
變化的名稱不持續到boundary2
的名字。
我試過測試解決方案,第一個對象的更改沒有更新其他上下文中的對象。我更新了我的問題。 – Padin215