我正在使用单例数据控制器从两个不同的视图调用我的核心数据函数:创建视图和历史视图。
第一个视图只有创建或查看历史按钮以转到相应的视图。
我的问题是我必须通过我的创建过程(在创建视图中按 create Care)才能在我的历史视图中接收来自核心数据的任何内容。因此,我假设我必须启动我的 managedObjectContext。还是我需要初始化一些其他核心数据元素?
我在 appDelegate 中初始化了 dataControllerSingelton。但是,我无法弄清楚如何在我的单个 init 方法中初始化托管对象上下文:
+(DataControllerSingleton *)singleDataController{
static DataControllerSingleton * single=nil;
@synchronized(self)
{
if(!single)
{
single = [[DataControllerSingleton alloc] init];
single.masterCareList = [[NSMutableArray alloc]init];
//NSManagedObjectContext *managedObjectContext = [[DataControllerSingleton singleDataController] managedObjectContext]; - This lame attempted does not work
}
}
return single; }
我在 singletonDataController.m 中的 managedObjectContext 方法:
- (NSManagedObjectContext *)managedObjectContext
{
if (_managedObjectContext != nil) {
return _managedObjectContext;
}
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil) {
_managedObjectContext = [[NSManagedObjectContext alloc] init];
[_managedObjectContext setPersistentStoreCoordinator:coordinator];
}
return _managedObjectContext;
}
运行此 create Care 方法后,它可以正常工作:
- (void)insertNewObject:(Care *)care{
NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext];
NSEntityDescription *entity = [[self.fetchedResultsController fetchRequest] entity];
NSManagedObject *newManagedObject = [NSEntityDescription insertNewObjectForEntityForName:
[entity name] inManagedObjectContext:self.managedObjectContext];
NSString *fileName = care.pictureURL;
NSString *text = care.causeText;
NSDate *date = care.date;
NSData *imgData = care.imageData;
[newManagedObject setValue:fileName forKey:@"urlPath"];
[newManagedObject setValue:text forKey:@"name"];
[newManagedObject setValue:date forKey:@"date"];
[newManagedObject setValue:imgData forKey:@"imageData"];
// Save the context.
[self saveContext];
}
任何反馈或提示都是有帮助的,我也非常感谢详细的代码!