2011-04-19 101 views
0

我目前正在研究核心數據調查應用程序。現在,當我的核心數據實體首次被程序創建後,我的程序遇到了問題。我有一個'else'語句,這是我第一次保存它。值被保存,但應用程序崩潰。然後我可以重新啓動應用程序,並且NSManagedObject正常工作。問題在於我的其他陳述,但我無法弄清楚什麼是錯的。第一次爲核心數據調用「無」保存方法 - 爲什麼?

下面是代碼:

- (IBAction)save:(id)sender { 
    if (rootController != nil) { 
    if (team != nil) { 
     [team setValue:name.text forKey:@"name"]; //UITextfield -> NSString 
     [team setValue:teamNumber.text forKey:@"teamNumber"]; //UITextfield -> NSString 
     [team setValue:[NSNumber numberWithInt:totalRank] forKey:@"totalRankValue"]; //Int -> NSNumber 
     [team setValue:driveTrain.text forKey:@"driveTrain"]; //UITextfield -> NSString 
     [team setValue:[NSNumber numberWithInt:autonomousRank] forKey:@"autonomousRankValue"]; //Int -> NSNumber 
     [team setValue:[NSNumber numberWithInt:robotSpeedRank] forKey:@"robotSpeedRankValue"]; //Int -> NSNumber 
     [team setValue:[NSNumber numberWithInt:minibotRank] forKey:@"minibotSpeedRankValue"]; //Int -> NSNumber 
     [team setValue:[NSNumber numberWithInt:grabberRank] forKey:@"grabberRankValue"]; //Int -> NSNumber 

     [rootController saveContext]; 

     NSLog(@"Save works - team is not nil"); 
     //Begin debug 

     NSError* error; 
     if(![[team managedObjectContext] save:&error]) { 
     NSLog(@"Failed to save to data store: %@", [error localizedDescription]); 
     NSArray* detailedErrors = [[error userInfo] objectForKey:NSDetailedErrorsKey]; 
     if(detailedErrors != nil && [detailedErrors count] > 0) { 
      for(NSError* detailedError in detailedErrors) { 
      NSLog(@" DetailedError: %@", [detailedError userInfo]); 
      } 
     } 
     NSLog(@" %@", [error userInfo]); 

     } 

     //End debug 
    } 
    else { 
     [rootController insertTeamWithName:name.text 
           teamNumber:teamNumber.text 
           driveTrain:driveTrain.text 
        autonomousRankValue:[NSNumber numberWithInt:autonomousRank] 
         grabberRankValue:[NSNumber numberWithInt:grabberRank] 
        minibotSpeedRankValue:[NSNumber numberWithInt:minibotRank] 
        robotSpeedRankValue:[NSNumber numberWithInt:robotSpeedRank] 
          totalRankValue:[NSNumber numberWithInt:totalRank]]; 

     NSLog(@"Team is nil"); 

     //Begin debug 

     NSError* error; 
     if(![[team managedObjectContext] save:&error]) { 
     NSLog(@"Failed to save to data store: %@", [error localizedDescription]); 
     NSArray* detailedErrors = [[error userInfo] objectForKey:NSDetailedErrorsKey]; 
     if(detailedErrors != nil && [detailedErrors count] > 0) { 
      for(NSError* detailedError in detailedErrors) { 
      NSLog(@" DetailedError: %@", [detailedError userInfo]); 
      } 
     } 
     else { 
      NSLog(@" %@", [error userInfo]); 
     } 
     } 

     //End debug 


    } 
    } 
    [self dismissModalViewControllerAnimated:YES]; 
} 

任何幫助是極大的讚賞。

感謝,

凱文

+1

我認爲包括崩潰的細節也是有幫助的。 – paulbailey 2011-04-19 06:45:59

回答

1

由於我缺乏關於我要猜測問題是錯誤的詳細信息,此條件:

if (team != nil) { 
//... 
}else{ 
//.. 
    if(![[team managedObjectContext] save:&error]) { 
     //... 
} 

您從獲得managedObjectContext team對象,即使該代碼行僅在team==nil時才被調用。這意味着電話總是真的:

if(![[nil managedObjectContext] save:&error]) { 

......這是永遠不會工作。

+0

當第一次創建一個新的managedObjectContext團隊時,它被設置爲nil並調用'else'。團隊保存一次後,程序只使用'if'語句,不應該調用'else'語句。 else語句只要我堅持使用NSString,但是在使用NSNumber時會崩潰程序。至於有關錯誤的詳細信息,您是否有任何建議從調試器中檢索該信息?謝謝! – Egdod 2011-04-19 17:47:12

+0

我的不好,我意識到我從來沒有改過這個問題。它應該更像是「如何正確保存新的managedObjectContext」。在編寫問題XD的過程中,我解決了幾個問題 – Egdod 2011-04-19 17:56:17