1

通常のビューコントローラー(ナビゲーションコントローラー内に埋め込まれている)内に埋め込まれているテーブルビューがあります。

一般的に言えば、などのメソッドを呼び出すとtableView:numberOfRowsInSection:、正常tableView:titleForHeaderInSectiontableView:cellForRowAtIndexPath:機能しますが、それらは表示され、正しく機能します。

次に、セクションの表示の問題が発生します。奇妙な理由で、プログラムの実行時にメソッドnumberOfSectionsInTableview:が表示されません。NSLogブレークポイントを挿入するだけでなく、を挿入することによってこれをテストしました。このメソッド内では何も認識されていません。セクションを表示するために呼び出すと(私はそれをすべて整理していますNSFetchedResultsController)、現在5を表示する必要があるときに最初のセクションのみを表示します(numberOfSectionsInTableview必須ではなく、デフォルトは1であるため)。

これは、tableViewが実際にはtableviewコントローラーではなく、ViewController内に埋め込まれているために発生していると思います。tableView:しかし、その場合、なぜ他の方法のために特別なことをする必要がないのですか?私が知る限り、他のsectionメソッドが正しく機能しているため、コードのsectionInfo部分(NSFetchedResultsController内)が適切に設定されています(NSLogメソッドが呼び出されるように各メソッド内に配置します)。

この問題を理解および/または修正する際にあなたが与えることができるどんな助けも大いにありがたいです!私のコードについてさらに情報が必要な場合はお知らせください。

編集

このフィールドに関連するため、私が使用しているすべてのコードは次のとおりです。

- (NSFetchedResultsController *)fetchedResultsController {
if (fetchedResultsController == nil) {

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];

    NSEntityDescription *entity = [NSEntityDescription entityForName:@"ActiveList" inManagedObjectContext:self.managedObjectContext];
    [fetchRequest setEntity:entity];

    NSSortDescriptor *sortDescriptor1 = [NSSortDescriptor sortDescriptorWithKey:@"category" ascending:YES];
    NSSortDescriptor *sortDescriptor2 = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];
    [fetchRequest setSortDescriptors:[NSArray arrayWithObjects:sortDescriptor1, sortDescriptor2, nil]];

    //[fetchRequest setSortDescriptors:@[ sortDescriptor1, sortDescriptor2 ]];

    // Only retrieves items where 'isActive' SQLite field is '1' or 'YES'
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"isActive == %@", [NSNumber numberWithBool:YES]];
    [fetchRequest setPredicate:predicate];

    [fetchRequest setFetchBatchSize:20];

    fetchedResultsController = [[NSFetchedResultsController alloc]
                              initWithFetchRequest:fetchRequest
                              managedObjectContext:self.managedObjectContext
                              sectionNameKeyPath:@"category"
                              cacheName:@"ActiveLists"];


    fetchedResultsController.delegate = self;
}
return fetchedResultsController;
}

- (void)performFetch {

NSError *error;
if (![self.fetchedResultsController performFetch:&error]) {
    FATAL_CORE_DATA_ERROR(error);
    return;
}
}

- (void)viewDidLoad
{
[super viewDidLoad];


[self performFetch];

}

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

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
id <NSFetchedResultsSectionInfo> sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:section];
return [sectionInfo name];
}
4

1 に答える 1

2

vが大文字化されていないnumberOfSectionsInTableViewの大文字化であることが判明しました。

于 2013-02-16T07:00:16.703 に答える