如果我在每个视图控制器中创建一个实体的新片段(属性),然后再切换到下一个视图控制器以创建最终实体的另一个片段,我该如何将数据从每个视图控制器传递到最终视图控制器可以选择保存实体。
例如,我有一个由以下属性组成的实体:正文,日期,类别,照片和目标。在移动到下一个属性之前,每个属性都在单独的视图控制器中创建。我不知道在最终视图中我如何插入新的NSEntityDescription并将每个属性分配给从先前视图控制器收集的数据。将数据从一个vc传递到下一个vc的最佳方法是什么?从最终视图中的每个vc中提取信息?
答案 0 :(得分:0)
你的方式是错误的(在我看来)。
你应该这样做:
修改强>
没有同一并发类型的父子语境的问题(在这种情况下是主要的)。
您的" App Delegate"所需的更改(假设apple提供样板代码):
- (NSManagedObjectContext *)managedObjectContext
{
if (_managedObjectContext != nil) {
return _managedObjectContext;
}
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil) {
_managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
[_managedObjectContext setPersistentStoreCoordinator:coordinator];
}
return _managedObjectContext;
}
/**
This will create a disposable context with main queue concurrency type.
The disposable context will have the main context as parent.
Pass this around view controllers while editing the same part of the object graph.
*/
- (NSManagedObjectContext*) editingContext
{
NSManagedObjectContext* ctx = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
ctx.parentContext = self.managedObjectContext;
return ctx;
}
您应该在委托的头文件中公开editingContext
方法。
保存(假设只有一个父语境):
//get an editing context
editingContext = [appDelegate editingContext];
//pass this context to all editing views
//when you are ready to save:
NSError* error = nil;
[editingContext save:&error];
//check for errors
[editingContext.parentContext save:&error];
//check for errors