2013-06-25 98 views
2

我正在使用單例數據控制器從兩個不同的視圖調用我的核心數據函數:創建視圖和歷史視圖。初始化核心數據managedObjectcontext

第一個視圖只是創建或查看歷史記錄按鈕以轉到相應的視圖。

我的問題是,我必須通過我的創建過程(在創建視圖中按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; } 

我managedObjectContext方法singletonDataController.m:

- (NSManagedObjectContext *)managedObjectContext 
{ 
if (_managedObjectContext != nil) { 
    return _managedObjectContext; 
} 

NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator]; 
if (coordinator != nil) { 
    _managedObjectContext = [[NSManagedObjectContext alloc] init]; 
    [_managedObjectContext setPersistentStoreCoordinator:coordinator]; 
} 
return _managedObjectContext; 
} 

我運行它的工作原理是建立護理方法後罰款:

- (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]; 
} 

任何反饋或提示是有幫助的,我非常感謝詳細的代碼以及!

回答

2

你很好,這應該工作。您正在正確地創建託管對象上下文,因此如果尚未創建,它應該被創建。

我覺得你的單身狗絕對是矯枉過正。使用蘋果樣板來初始化應用程序委託中的核心數據堆棧然後給視圖控制器一個簡單的managedObjectContext屬性是有意義的。

非常簡單,有幾十個像蘋果這樣的示例項目。除非您與iCloud異步同步,否則您對單身人士沒有任何用處。

+0

我同意,你的設置看起來不錯,你應該使用print語句或斷點來檢查初始化程序後的NSManagedObjectContext的狀態。我會調整一些設計元素。首先,正如@Mundi所說的那樣,這是矯枉過正的。我將單核心數據用於單身人士的唯一原因是,如果我有更復雜的核心數據結構,在這種情況下,單身人士實際上不會傳出其managedObjectContext。**我會用它來獲得一個孩子的實例上下文,我可以用它來做後臺導入和處理。 – mrosales

+0

當我調試這行時沒有任何反應:NSManagedObjectContext * managedObjectContext = [[DataControllerSingleton singleDataController] managedObjectContext]; – djcj

+0

....它只是跳過它,並繼續前進。 我剛開始沒有單身,但後來有人提出了辛格爾頓的想法,我想嘗試一下。我可能會重建其實:/ – djcj

相關問題