2014-07-19 65 views
0

我想使用CoreData。我已经在一段时间后创建了这个coreData文件。我正在尝试向文件写入一些值,但上下文始终为空。核心数据 - 上下文为空

- (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对象获取此上下文。我在我的应用程序中使用TabBarController,它从第一个选项卡开始。哪里不对?

更新::

@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; 
} 
+2

请发布代码从AppDelegate managedObjectContext方法。 – blazejmar

+0

......如果你是我的员工,请解释为什么你显然认为使用应用程序委托作为一个全能的单身人士是合适的。我怀疑这不是一个有用的评论。 – Tommy

+0

我已更新帖子。我仍然在学习目标 - C @Tommy和我第一次使用CoreData。 – DKM

回答

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; 
} 
+0

你应该接受这个答案。 – Mundi

相关问题