0

次のコードがあります。

- (NSFetchedResultsController *)fetchedResultsController {
    if (!_fetchedResultsController) {
        NSManagedObjectContext *context = [(AppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];
        NSEntityDescription *entity = [NSEntityDescription entityForName:@"ArticleInfo" inManagedObjectContext:context];
        NSFetchRequest *request = [[NSFetchRequest alloc] init];
        request.entity = entity;

        NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"timeStamp" ascending:NO];
        request.sortDescriptors = [NSArray arrayWithObject:descriptor];

        request.fetchBatchSize = 20;

        NSFetchedResultsController *fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:context sectionNameKeyPath:nil cacheName:@"Root"];
        _fetchedResultsController = fetchedResultsController;
        _fetchedResultsController.delegate = self;
    }

    return _fetchedResultsController;
}

このエラーが報告されます。

互換性のないタイプ 'RootViewController *const __strong' から 'id' に割り当てています

それを引き起こすために私は正確に何を間違っていますか?

4

1 に答える 1

1

NSFetchedResultsControllerDelegateクラスがプロトコルに準拠していることをコンパイラに知らせる必要があります。

.hこれを行うには、ファイルに追加します

@interface RootViewController : UITableViewController <NSFetchedResultsControllerDelegate>

または、クラス拡張に追加することをお勧めします。だからあなたの.mファイルで

@interface RootViewController () <NSFetchedResultsControllerDelegate>

これが少し良いと考えられる理由は、情報隠蔽が優れているためです.他のクラスはプロトコルにRootViewController準拠していることを知る必要がないNSFetchedResultsControllerDelegateのに、なぜ公開するのですか?

于 2013-04-05T22:03:04.200 に答える