4 Stimmen

Update/Edit coreData verwaltetes Objekt

Ich versuche, ein CoreData-Objekt zu bearbeiten, wenn ein Benutzer auf eine Zelle in einer UITableView basierend auf dem cell.accessoryType klickt, um anzuzeigen, ob das Element angeklickt wurde. Hier ist der aktuelle Code.

- (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);

}
}

Es scheint das richtige Objekt auszuwählen, da NSLog() das richtige Element anzeigt, aber wenn ich versuche, mit der Punktnotation zu aktualisieren, z. B. "itemToUpdate.purchased = YES;", gibt der Compiler einen Fehler aus: "request for member 'purchased' in something not a structure or union".

Ich weiß, ich bin wahrscheinlich tun dies falsch (mein erstes Projekt in Xcode) - jede Beratung würde sehr geschätzt werden!

Danke

6voto

westsider Punkte 4959

Haben Sie es schon versucht?

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

Formular?

Ich unterstelle immer NSManagedObject und die Punktnotation funktioniert für deklarierte Eigenschaften. Aber Sie könnten diese "ältere" Notation ausprobieren, um zu sehen, ob das funktioniert.

0voto

Chosia Punkte 11

Ich nehme an, Sie haben eine benutzerdefinierte Unterklasse von "NSManagedObject" mit "purchased" als eine der Eigenschaften erstellt. Deklarieren Sie "itemToUpdate" als ein Objekt dieser Unterklasse und nicht als NSManagedObject:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X