我想使用CoreData。一段时间后,我已经手动创建了这个coreData文件。我正在尝试将一些值写入文件,但上下文始终为null。
- (NSManagedObjectContext *)managedObjectContext {
NSManagedObjectContext *context = nil;
AppDelegate *delegate = [[UIApplication sharedApplication] delegate];
context = [delegate managedObjectContext];
if(context == nil)
{
NSLog(@"CONTEXT IS NIL");
}
return context;
}
方法没有错误,但崩溃了:
//here is null
NSManagedObjectContext *context = [self managedObjectContext];
// Create a new managed object
NSManagedObject *newDevice = [NSEntityDescription insertNewObjectForEntityForName:@"Kwejki" inManagedObjectContext:context];
上下文为空。如果我从AppDelegate对象获取此上下文,我不知道为什么它为null。我在我的应用程序中使用TabBarController,它在第一个选项卡中启动。有什么问题?
UPDATE ::
@synthesize managedObjectContext = _managedObjectContext;
@synthesize managedObjectModel = _managedObjectModel;
@synthesize persistentStoreCoordinator = _persistentStoreCoordinator;
- (NSManagedObjectContext *)managedObjectContext {
if (self.managedObjectContext != nil) {
return self.managedObjectContext;
NSLog(@"managedOC - != nil");
}
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil) {
NSLog(@"coordinator - != nil");
//Here I get two errors below "Receiver type NSManagedObjectContext for instance message is a forward declaration"
self.managedObjectContext = [[NSManagedObjectContext alloc] init];
[self.managedObjectContext setPersistentStoreCoordinator:coordinator];
}
return self.managedObjectContext;
}
答案 0 :(得分:0)
您应该使用实例变量进行延迟实例化。只需从Xcode模板中复制应用程序代理代码(无论何时检查"使用核心数据")。你为什么一开始就改变它?
- (NSManagedObjectContext *)managedObjectContext {
if (_managedObjectContext != nil) {
return _managedObjectContext;
}
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil) {
_managedObjectContext = [[NSManagedObjectContext alloc] init];
[_managedObjectContext setPersistentStoreCoordinator:coordinator];
}
return _managedObjectContext;
}
答案 1 :(得分:0)