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はオブジェクトで埋められます。なぜ私はカウントに2つの異なる結果がありますか?

答えて

12

あなたがperformFetch:を呼び出すまで、結果のカウントが0に

あるのでNSFetchedResultsControllerが実際にあなたがperformFetch:を呼び出した後fetchedObjects.countをログインした場合、あなたはのtableViewの行数と一致した数が表示されます、フェッチ要求を実行しません。 。

+0

ありがとうございます! – Alex

+0

@David Cauntでこれを手伝ってもらえますか?http://stackoverflow.com/questions/19358095/core-data-reset – Ranjit

関連する問題