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 diesectionNameKeyPath
parameter der bezeichneten initialiser, die Sie festlegen möchten, wie IhretrainingLevel
Eigenschaft. - Beachten Sie auch, dass Ihre
fetchedResultsController
getter sollte die Durchführung der fetch, nichtfetchWorkoutSet
, sonst musst du zwei verschiedene Anrufe wenn Sie brauchen, um das workout-set wurde geholt, und Sie müssen fetchedResults.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist ein gutes tutorial über die Verwendung
fetchedResultsControllers
: http://www.raywenderlich.com/999/core-data-tutorial-for-ios-how-to-use-nsfetchedresultscontrollerErstellen einige Eigenschaften zu halten Sie Ihren Kontext an und ruft:
In Ihrem
fetchedResultsController
- Eigenschaft, verwendensectionKeyNamePath
um Ihre gefundenen Ergebnisse in den Abschnitten:Ihre erste Bevölkerung Ihrer
fetchedResultsController
passieren kann, in Ihre-viewDidLoad:
Würden Sie dann wieder die Anzahl der Abschnitte und die Anzahl der Zeilen in Abschnitten wie diesem:
Können Sie dann Ihre verwalteten Objekten, für die bestimmte Zeile wie diese:
WorkoutSet
Objekte sind das, was die durch zurückgegeben werden diefetchedResultsController
.