2012-03-23 88 views
1

我試圖使用CoreData更新數據庫中的現有記錄,但在使用託管對象訪問器方法時出現異常。iOS:CoreData更新數據時出現異常

代碼摘錄:

NSManagedObjectContext *tmpManagedObjectContext = [self.fetchedResultsController managedObjectContext]; 

NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Contact" inManagedObjectContext:tmpManagedObjectContext]; 
[request setEntity:entity]; 

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"contact_id = %@", [dict objectForKey:@"contact_id"]]; 
[request setPredicate:predicate]; 

NSError *error = nil; 
[request setResultType:NSDictionaryResultType]; 
[request setPropertiesToFetch:[NSArray arrayWithObjects:@"first_name",@"sync_status",nil]]; 

Contact *contact = [[managedObjectContext executeFetchRequest:request error:&error] objectAtIndex:0]; 
contact.sync_status = @"Y"; 

error = nil; 
if (![tmpManagedObjectContext save:&error]) { 
    NSLog(@"Error setting sync status on contact record - error: %@", [error localizedDescription]); 
} 

,導致該錯誤的代碼行是:

contact.sync_status = @"Y"; 

錯誤是*終止應用程序由於未捕獲的異常 'NSInvalidArgumentException',原因是:「 - [NSKnownKeysDictionary1 setSync_status:]:發送到實例0x8907fd0的無法識別的選擇器' *第一次擲出調用堆棧:

聯繫人是我在Xcode中自動生成的NSManagedObject類。

我的方法在這裏不正確嗎?我在檢索或刪除記錄方面沒有任何問題,但我很難找到如何更新數據。

任何指導或幫助將不勝感激。謝謝。

+0

看看你在調試器中的'contact'對象,它看起來不像你認爲的那種類型。 – jrturton 2012-03-23 08:14:12

回答

10

您已將您的獲取請求配置爲返回字典而不是託管對象。如果你想更新返回的對象,你必須在提取請求中請求它們 - 也就是說,使用默認行爲而不是你正在做的事情。

刪除這些行:

[request setResultType:NSDictionaryResultType]; 
[request setPropertiesToFetch:[NSArray arrayWithObjects:@"first_name",@"sync_status",nil]]; 

而且你會沒事的。如果您只想在提取中返回某些屬性,但希望獲取整個對象,則可以使用上面的代碼行。

+0

謝謝。問題已解決。 – rosst400 2012-03-23 21:37:13

相關問題