2014-07-19 107 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

相關問題