7

我使用的輸出tableView的標準實現。在-viewDidLoad末我在做第一個電話:fetchedResultsController.fetchedObjects.count = 0,但它充滿了對象

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

這是我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; 
} 

tableView方法:

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

所以,問題是:

日誌中的_fetchedResultsController.fetchedObjects.count等於0,但視覺tableView充滿了對象。爲什麼我有兩個不同的計數結果?

回答

12

NSFetchedResultsController不如果在調用performFetch:後登錄fetchedObjects.count不實際直到調用performFetch:執行讀取請求,所以結果數爲0

,你會看到一些它匹配的tableView行數。

+0

謝謝,你是對的! – Alex

+0

@David Caunt你能幫我解決這個http://stackoverflow.com/questions/19358095/core-data-reset – Ranjit