2010-12-03 10 views
4

J'essaie de modifier un objet CoreData lorsqu'un utilisateur clique sur une cellule dans un UITableView basé sur cell.accessoryType pour indiquer si l'élément a été cliqué. Voici le code actuel.Mise à jour/modification de l'objet géré 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); 

} 
} 

Il semble sélectionner l'objet à droite parce que le NSLog() affichera l'élément correct, mais lorsque je tente de mettre à jour en utilisant la notation de point par exemple "itemToUpdate.purchased = YES;" le compilateur lance une erreur "demande de membre" acheté "dans quelque chose qui n'est ni une structure ni une union".

Je sais que je fais probablement ce mauvais (mon premier projet dans xcode) - tous les conseils seraient grandement appréciés!

Merci

Répondre

6

Avez-vous essayé:

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

?

J'ai toujours sous-classe NSManagedObject et la notation par points fonctionne pour les propriétés déclarées. Mais vous pourriez essayer cette notation "plus ancienne" pour voir si cela fonctionne.

+0

Merci! Ça a marché ... J'ai beaucoup de lecture à faire. Appréciez votre temps et aidez. :) – lostincode

0

Je suppose que vous avez créé une sous-classe personnalisée de 'NSManagedObject' avec 'acheté' comme l'une des propriétés. Déclarer 'itemToUpdate' comme un objet de cette sous-classe, plutôt que NSManagedObject:

YourCustomSubclassOfNSManagedObject *itemToUpdate = [groceryArray objectAtIndex:indexPath.row];