2012-03-23 7 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

答えて

10

管理対象オブジェクトではなくディクショナリを返すようにフェッチ要求を構成しました。返されたオブジェクトを更新する場合は、フェッチ要求でそれらを要求する必要があります。つまり、実行中のオブジェクトではなくデフォルトの動作を使用する必要があります。

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

をそして、あなたは大丈夫:

これらの行を削除します。上記の行は、フェッチで特定のプロパティのみを返す場合に使用しますが、オブジェクト全体が必要です。

+0

ありがとうございます。問題は解決しました。 – rosst400

関連する問題