1

私はメインのtableViewControllerを持っています。ボタンを押すと、self.navigationがaddItem viewControllerをプッシュし、save self.navigationをクリックして追加VCをポップすると、メインのものに戻ります。正常に追加して保存し、フェッチもしますが、セルの数を取得するようになり、数値は 0 を返します。メソッドは次のとおりです。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{

id <NSFetchedResultsSectionInfo> secInfo = [[self.fetchedResultsController sections]     objectAtIndex:section];
NSLog(@"No. of cells determined: %lu", (unsigned long)[secInfo numberOfObjects]);
return[secInfo numberOfObjects];

}

NSLog は私に 0 を与えます、何が問題なのか、これは私に頭痛を与えました。

取得リクエストは次のとおりです。

- (NSFetchedResultsController*) fetchedResultsController {

// Fetch Request
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Goal"
                                          inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"title"
                                                               ascending:NO];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];




// setting _fethcedResultsController
_fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
                                                                managedObjectContext:self.managedObjectContext
                                                                  sectionNameKeyPath:nil
                                                                           cacheName:nil];




// setting _fetchedResultsController to self
_fetchedResultsController.delegate = self; // for the tableview updating thing



// Thats it
return _fetchedResultsController;

}

アイテムのチェックを実行すると、nil ではないことに注意してください。

// fetching all items to check how many of them exists
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity: [NSEntityDescription entityForName:@"Goal"
                                     inManagedObjectContext:self.managedObjectContext]];
NSManagedObjectContext *moc = self.managedObjectContext;

NSError *fetchError = nil;
NSArray *goals = [moc executeFetchRequest:fetchRequest error:&fetchError];

NSLog(@"No. of goals: %lu", (unsigned long)[goals count]);
// end of check for items
4

1 に答える 1

1

この行コードを入れるのを忘れました:

if (_fetchedResultsController != nil) {
    return _fetchedResultsController;
 }

メソッドで

- (NSFetchedResultsController*) fetchedResultsController; 

そのため、アプリは常に新しい fetchedResultsController を作成し、古いものを上書きします。

于 2013-09-13T11:45:15.273 に答える