2015-09-12 24 views
0

我在我的應用程序中使用CoreData,我有兩個主要實體,比如說貓和狗。 我有這樣的方法,我用它來初始化我的上下文:iOS - 更新多個CoreData實體和上下文

 - (NSManagedObjectContext *)managedObjectContext 
{ 
NSManagedObjectContext *context = nil; 
id delegate = [[UIApplication sharedApplication] delegate]; 
if ([delegate performSelector:@selector(managedObjectContext)]) { 
context = [delegate managedObjectContext]; 
} 
return context; 
} 

它指的是這個方法在我的應用程序代表:現在

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

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

,在某些時候,我需要更新一些數據我的貓實體。

  NSManagedObjectContext *context = [self managedObjectContext]; 
      NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Cats"]; 
      NSMutableArray *catsArrayData = [[context executeFetchRequest:fetchRequest error:nil] mutableCopy]; 
    NSManagedObject *aCat = [catsArrayData objectAtIndex:i]; 
    NSMutableArray *catsArray = [aCat valueForKey:@"cat"]; 
    [catsArray addObject:responseData]; 
    [aCat setValue:catsArray forKey:@"cat"]; 
        NSError *error = nil; 
[context save:&error]; 

然後,我想爲我的狗實體做同樣的事情。所以我使用相同的代碼,但對於狗實體。這是在我的代碼另一部分,所以我必須要重新定義:

NSManagedObjectContext *context = [self managedObjectContext]; 

但問題是,即使我保存這個第二方面,它實際上是不保存。數據不存在。我該如何解決這個問題?

+0

很難從你提供的代碼中識別出來,但是我懷疑你不得不重新定義'NSManagedObjectContext'。我建議你的問題是相關的,而不是你的代碼的結構。 – andrewbuilder

+0

@andrewbuilder是的,我想這是很難用這段代碼,但我想避免把whooole頁。但基本上這兩個實體基本上都以相同的方式調用,只是實體名稱發生了變化。但在第二個他們沒有得救...我怎麼能提供更多的信息? –

+0

有些用戶將他們的項目或相關類上傳到GitHub。更重要的是,您可以刪除對MOC的引用,並將其替換爲包含您的保存方法的代碼。最重要的是,我建議您瞭解視圖控制器多態性,層次結構和繼承。斯坦福大學Paul Hegarty在iTunes U上的講座很棒。 – andrewbuilder

回答