iOS UITableView Abschnitte mit fetchedResultsController Verwirrung

Ich habe eine Entität angezeigt werden in einer Tabelle anzeigen in nur einem Abschnitt. Das Unternehmen hat zwei Attribute, die workoutName und trainingLevel. Beide sind vom Typ string. Training level besteht aus 3 Typen: 1, 2, 3. (trainingLevel = (Integer 16-oder String-Typ? Welche wäre ideal?) Ich möchte teilen Sie die Tabelle in drei Abschnitte unterteilt, jeder Abschnitt enthält Einträge, die für die entsprechenden Trainings-Niveau.

Wie mache ich das? Der code, den ich momentan verwende, ist unten:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
//Return the number of sections.
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    //Return the number of rows in the section.
    return self.workoutType.workouts.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell =
    [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle
                                  reuseIdentifier:CellIdentifier];
        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    }


    WorkoutSet *workoutSet = [self.fetchedResultsController objectAtIndexPath:indexPath];


    cell.textLabel.text = workoutSet.workoutName;
    cell.detailTextLabel.text = [NSString stringWithFormat:@"(%d)", workoutSet.days.count];    
}

-(void)fetchWorkoutSets
{

    NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"WorkoutSet"];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"workoutType = %@", self.workoutType];

    NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"workoutName" ascending:YES];
    [fetchRequest setSortDescriptors:@[sortDescriptor]];
    [fetchRequest setPredicate:predicate];
    self.fetchedResultsController = [[NSFetchedResultsController alloc]
                                 initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext
                                 sectionNameKeyPath:nil cacheName:nil];

    NSError *error;
    if (![self.fetchedResultsController performFetch:&error])
    {
        NSLog(@"Fetch failed: %@", error);
    }
}

Was ich mit zu kämpfen ist:

  • Wie bestimmen Sie die Anzahl der Zeilen, die für jeden Abschnitt durch das core-Datenmodell durch abrufen der Anzahl der Einträge, die mit der Ausbildung der Stufe 1 oder 2 oder 3.
  • Hinweise zum ausfüllen der Zeilen in jedem Abschnitt durch das Holen der richtigen Elemente.
  • Wie man einen Titel zu jedem Abschnitt header.
  • Sie sind ziemlich viel es. Überprüfen Sie die Dokumentation für NSFetchedResultsController insbesondere die sectionNameKeyPath parameter der bezeichneten initialiser, die Sie festlegen möchten, wie Ihre trainingLevel Eigenschaft.
  • Beachten Sie auch, dass Ihre fetchedResultsController getter sollte die Durchführung der fetch, nicht fetchWorkoutSet, sonst musst du zwei verschiedene Anrufe wenn Sie brauchen, um das workout-set wurde geholt, und Sie müssen fetchedResults.
InformationsquelleAutor user2512523 | 2013-08-21
Schreibe einen Kommentar