2010-12-03 16 views
4

私は、アイテムがクリックされたかどうかを示すためにcell.accessoryTypeに基づいてユーザーがUITableView内のセルをクリックしたときにCoreDataオブジェクトを編集しようとしています。ここに現在のコードがあります。update/edit coreData管理オブジェクト

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 

NSManagedObject *itemToUpdate = [groceryArray objectAtIndex:indexPath.row]; 
NSLog(@"updating: %@", itemToUpdate); 

if (cell.accessoryType == UITableViewCellAccessoryCheckmark) { 
    cell.accessoryType = UITableViewCellAccessoryNone; 
    itemToUpdate.purchased = NO; 
}else { 
    cell.accessoryType = UITableViewCellAccessoryCheckmark; 
    itemToUpdate.purchased = YES; 
} 

// Commit the change. 
NSError *error; 
if (![managedObjectContext save:&error]) { 
    // Handle the error. 
    NSLog(@"Saving changes failed: %@", error); 

} 
} 

のNSLog()が正しい項目が表示されますので、私は、例えば、ドット表記を使用して更新しようとすると、それは右のオブジェクトを選択しているようです"itemToUpdate.purchased = YES;"コンパイラは "構造体または共用体ではないものに購入された"メンバーの要求 "というエラーをスローします。

私はおそらくこれが間違っていることを知っています(xcodeの私の最初のプロジェクト) - アドバイスをいただければ幸いです!

おかげ

答えて

6

あなたが試してみました:

[itemToUpdate setValue:[NSNumber numberWithBool:NO] forKey:@"purchased"] 

フォームを?

私は常にNSManagedObjectをサブクラス化し、ドット表記は宣言されたプロパティで機能します。しかし、それが機能するかどうかを見るために、この "古い"表記法を試してみてください。

+0

ありがとう!それはうまくいった...私は多くの読書をする必要があります。あなたの時間と助けを感謝します。 :) – lostincode

0

'NSManagedObject'のカスタムサブクラスをプロパティの1つとして '購入済み'として作成したとします。 NSManagedObjectではなく、このサブクラスのオブジェクトとして 'itemToUpdate'を宣言してください。

YourCustomSubclassOfNSManagedObject *itemToUpdate = [groceryArray objectAtIndex:indexPath.row]; 
関連する問題