【发布时间】:2014-06-13 15:34:18
【问题描述】:
我见过一些例子,你会这样做:
_model = [NSManagedObjectModel mergedModelFromBundles:nil];
_coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:_model];
_context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType]; // THIS IS THE MAIN CONTEXT
[_context setMergePolicy:NSMergeByPropertyObjectTrumpMergePolicy];
_childContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
[_childContext performBlockAndWait:^{
[_childContext setParentContext:_context];
[_childContext setMergePolicy:NSMergeByPropertyObjectTrumpMergePolicy];
[_childContext setUndoManager:nil];
}];
然后您可以在视图的子上下文中插入一个项目,通常是模态视图。当用户点击取消时,该对象仅在子上下文中并且在那一刻永远不会被保存,因此很容易创建临时 NSManagedObjects 并丢弃它们,直到您保存两个上下文。你有什么理由不能这样做:
_parentContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
[_parentContext performBlockAndWait:^{
[_parentContext setPersistentStoreCoordinator:_coordinator];
[_parentContext setMergePolicy:NSMergeByPropertyObjectTrumpMergePolicy];
}];
_context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
[_context setParentContext:_parentContext];
[_context setMergePolicy:NSMergeByPropertyObjectTrumpMergePolicy];
现在您将内容插入到 parentContext 中。然后当你保存时,你首先保存_context(主上下文),然后它会冒泡到parentContext?它似乎在代码中工作,但我不知道是否有原因为什么我看到的示例都将对象插入到主要上下文是父上下文的 childContext 中。
或者有没有更好的方法来处理点击添加项目的用例,显示一个模式视图,其中包含为此视图创建的新 NSManagedObject。这就是我看到的大部分示例代码在显示“添加项目”视图时创建一个新项目的方式。问题是如果你点击添加项目,点击取消,然后再次点击添加项目,你现在会有两个 NSManagedObjects 在上下文中浮动。
【问题讨论】:
标签: core-data