7

Ich verwende ziemlich Standard-Implementierung von fetchedResultsController für die Ausgabe in tableView. Am Ende des -viewDidLoad ich zum ersten Anruf mache:holeResultsController.fetchedObjects.count = 0 aber es ist voller Objekte

NSError *error = nil; 
if (![[self fetchedResultsController] performFetch:&error]) 
{ 
    NSLog(@"Error! %@",error); 
    abort(); 
} 

das ist mein fetchedResultsController:

- (NSFetchedResultsController *) fetchedResultsController 
{ 
    if (_fetchedResultsController != nil) 
    { 
     return _fetchedResultsController; 
    } 
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Preparation" 
              inManagedObjectContext:_context]; 
    [fetchRequest setEntity:entity]; 

    int i = 1; 
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ismer == %d", i]; 
    fetchRequest.predicate = predicate; 

    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES]; 
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects: sortDescriptor, nil]; 

    fetchRequest.sortDescriptors = sortDescriptors; 

    _fetchedResultsController = [[NSFetchedResultsController alloc]initWithFetchRequest:fetchRequest managedObjectContext:_context sectionNameKeyPath:nil cacheName:nil]; 
    _fetchedResultsController.delegate = self; 
    NSLog(@"_fetchedResultsController.fetchedObjects.count - %d",   _fetchedResultsController.fetchedObjects.count); 

    return _fetchedResultsController; 
} 

meine tableView Methoden:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    return [[self.fetchedResultsController sections]count]; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    id <NSFetchedResultsSectionInfo> secInfo = [[self.fetchedResultsController sections] objectAtIndex:section]; 
    return [secInfo numberOfObjects]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) 
    { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
    } 

    CDPreparation *drug = (CDPreparation *)[self.fetchedResultsController objectAtIndexPath:indexPath]; 
    cell.textLabel.text = [NSString stringWithFormat:@"%@", drug.name]; 
    return cell; 
} 

Also Frage ist:

im Protokoll von _fetchedResultsController.fetchedObjects.count ist gleich 0, aber visuell tableView ist mit Objekten gefüllt. Warum habe ich zwei verschiedene Ergebnisse für die Zählung?

Antwort

12

Ein NSFetchedResultsController nicht wirklich die Anfrage holen durchführen, bis Sie performFetch: rufen, so das Ergebnis Zahl 0.

ist Wenn Sie fetchedObjects.count log nach performFetch: Aufruf, sehen Sie eine Nummer sehen, die die Zeilenanzahl entspricht Tableview .

+0

Danke, Sie haben Recht! – Alex

+0

@David Caunt können Sie mir bitte mit diesem http://stackoverflow.com/questions/19358095/core-data-reset helfen – Ranjit

Verwandte Themen