8

私はかなり標準的なfetchedResultsControllerfor output inの実装を使用していますtableView。最後に-viewDidLoad、最初の呼び出しを行っています:

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

だから、質問は:

in log of_fetchedResultsController.fetchedObjects.countは 0 ですが、視覚的tableViewにはオブジェクトで埋め尽くされています。count に対して 2 つの異なる結果が得られるのはなぜですか?

4

1 に答える 1

13

AnNSFetchedResultsControllerは、ユーザーが を呼び出すまでフェッチ リクエストを実際に実行しないperformFetch:ため、結果カウントは 0 です。

fetchedObjects.countを呼び出した後にログに記録performFetch:すると、tableView の行数と一致する数値が表示されます。

于 2013-09-23T08:43:51.220 に答える