Frage

Ich habe eine Liste app, wo Benutzer die + Taste getroffen und in einem Element eingeben, dass sie in der Liste angezeigt werden soll, und drücken Sie speichern. Der Tisch ist mit Kerndaten gespeichert. Das einzige Problem ist, wenn die Zelle geklebt ich ein Häkchen angezeigt werden soll. Ive aktiviert Mehrfachauswahl mit

UITableViewCell *thisCell = [tableView cellForRowAtIndexPath:indexPath]; 
if (thisCell.accessoryType == UITableViewCellAccessoryNone) {
    thisCell.accessoryType = UITableViewCellAccessoryCheckmark;  
} else {
    thisCell.accessoryType = UITableViewCellAccessoryNone;
} 
[tableView deselectRowAtIndexPath:indexPath animated:NO]; 

Ich mag die Häkchen in der Zelle nach dem User-Exits beibehalten werden. Ich habe ein Attribut in meiner Einheit namens „Kontrollen“ erstellt und gab ihm die Art der boolean, aber ich weiß nicht, wie es zu machen, wo, wenn Sie eine Reihe treffen dann ein Häkchen angezeigt und beibehalten wird. Jede Hilfe wäre sehr geschätzt. Dank

War es hilfreich?

Lösung

Dies ist, wie ich es tun. Ein bemerkenswerter Punkt: Coredata nicht booleans speichern, so dass jede Eigenschaft der Bezeichnung „boolean“ ist eigentlich vom Typ NSNumber. Du musst daran zu erinnern, hin und her zu konvertieren, wenn sie mit Coredata und Boolesche Werte handelt.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    NSManagedObject *selectedObject = [self.fetchedResultsController objectAtIndexPath:indexPath];


    if ([[selectedObject valueForKey:@"isDone"] boolValue]) {
        [selectedObject setValue:[NSNumber numberWithBool:NO] forKey:@"isDone"];
    } else {
        [selectedObject setValue:[NSNumber numberWithBool:YES] forKey:@"isDone"];
    }
}

Ich habe meine UITableViewController für die NSFetchedResultsController als die Delegierten festgelegt, so dass die Änderungen, die mich auf die verwalteten Objekte in der Abfrage gemacht ^^^ bewirkt, dass die folgenden zwei Verfahren ausgeführt werden.

- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller {
    [self.tableView reloadData];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *defaultCellIdentifier = @"Item";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:defaultCellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:defaultCellIdentifier] autorelease];
    }

    NSManagedObject *item = [[self fetchedResultsController] objectAtIndexPath:indexPath];
    cell.textLabel.text = [item valueForKey:@"name"];

    if ([[item valueForKey:@"checks"] boolValue]) {
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
    } else {
        cell.accessoryType = UITableViewCellAccessoryNone;
    }

    cell.selectionStyle = UITableViewCellSelectionStyleNone;

    return cell;
}

Hier ist, wie alles miteinander verbindet

  1. Der Nutzer klickt auf eine Zeile
  2. Tableview: didSelectRow ... Methode ändert die „IstFertig“ Eigenschaft des entsprechenden verwalteten Objekt
  3. .
  4. die abgerufenen Ergebnisse Controller bemerkt, dass ein verwaltetes Objekt geändert hat, und fordert die controllerDidChangeContent Methode auf seinem Delegierten.
  5. My controllerDidChangeContent Methode nur neu lädt alle Daten in der Tabellenansicht
  6. Wenn die Tableview neu geladen wird, meine Tableview: cellForRow ... Methode überprüft die „IstFertig“ Eigenschaft des verwalteten Artikel zu sehen, ob die Zelle ein Häkchen haben sollte oder nicht
  7. .

Und damit Sie nicht verwirrt bekommen, habe ich zunächst ein allgemeine NSMangagedObject Zustand speichern Zeile, weshalb die erste Methode, die ich so geschrieben, [selectedObject valueForKey:@"isDone"]. Später wechselte ich zu einem subclassed verwaltete Objekt namens JKItem, weshalb der zweite Satz von Methoden in der Lage ist item.isDone zu verwenden, ohne eine Compiler-Warnung erzeugt wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top