[英]automaticallyMergesChangesFromParent doesn't do anything
我正在觀看有關某些“新”更改的WWDC 2016(Core Data中的新增功能)視頻,在某些時候,有人說此新屬性automaticallyMergesChangesFromParent
應該自動合並子級上下文中父級的更改。
我創建了一個簡單的測試用例:
CustomObject *customObject = [[CustomObject alloc] initWithContext:self.persistentContainer.viewContext];
customObject.name = @"TEST";
customObject.customID = 2252;
self.persistentContainer.viewContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy;
NSManagedObjectContext *firstContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
firstContext.parentContext = self.persistentContainer.viewContext;
firstContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy;
firstContext.automaticallyMergesChangesFromParent = YES;
CustomObject *contextObj = [firstContext objectWithID:customObject.objectID];
NSLog(@"NAME [%@]", contextObj.name);
customObject.name = @"JO";
[self.persistentContainer.viewContext save:NULL];
NSLog(@"NAME [%@]", contextObj.name);
輸出為:
NAME [TEST]
NAME [TEST]
我希望是這樣的:
NAME [TEST]
NAME [JO]
如果我使用[firstContext refreshAllObjects];
它會按我預期的那樣工作,但是如果將automaticallyMergesChangesFromParent
設置為YES或NO,則沒有區別。
我是否想知道應該如何工作? 該文檔沒有太大幫助。
謝謝。
您正在firstContext中獲取和更新對象。 要automaticallyMergesChangesFromParent
驗證self.persistentContainer.viewContext
,您應該從self.persistentContainer.viewContext
獲取並更新。
self.secondObject = [[SecondCustomObject alloc] initWithContext:self.persistentContainer.viewContext];
self.secondObject.name = @"TEST";
self.persistentContainer.viewContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy;
NSManagedObjectContext *firstContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
firstContext.parentContext = self.persistentContainer.viewContext;
firstContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy;
firstContext.automaticallyMergesChangesFromParent = YES;
//firstContext.stalenessInterval = 0;
SecondCustomObject *contextObj = [self.persistentContainer.viewContext objectWithID:self.secondObject.objectID];
NSLog(@"NAME [%@]", contextObj.name);
contextObj.name = @"JO";
[self.persistentContainer.viewContext save:NULL];
SecondCustomObject * contextObj1 = [firstContext objectWithID:self.secondObject.objectID];
NSLog(@"NAME [%@]", contextObj.name);
NSLog(@"NAME [%@]", contextObj1.name);
NAME [TEST]
NAME [JO]
NAME [JO]
automaticallyMergesChangesFromParent = YES;
設置時, automaticallyMergesChangesFromParent = YES;
然后在父上下文中進行保存,CoreData會通過在子隊列上分派此塊(通過照常調用performBlock:
:)來自動在子上下文上調用mergeChangesFromContextDidSaveNotification:
當兩個上下文都在主隊列上工作時,您只會在下一個主循環上看到更改
嘗試
CustomObject *contextObj = [firstContext objectWithID:customObject.objectID];
NSLog(@"NAME [%@]", contextObj.name);
customObject.name = @"JO";
[self.persistentContainer.viewContext save:NULL];
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"NAME [%@]", contextObj.name);
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.