NSFetchResultsController委托没有被调用

时间:2012-10-22 21:57:11

标签: iphone objective-c ios ipad nsfetchedresultscontroller

我有以下代码:

- (NSFetchedResultsController *)fetchedResultsController {
    // Set up the fetched results controller if needed.
    if (fetchedResultsController == nil) {

 NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
        // Edit the entity name as appropriate.
        NSEntityDescription *entity = [NSEntityDescription entityForName:@"DiskStory" inManagedObjectContext:self.managedObjectContext];
        [fetchRequest setEntity:entity];

        fetchRequest.predicate = [NSPredicate predicateWithFormat:@"isRemoved == %@", [NSNumber numberWithBool:NO]];

        // Edit the sort key as appropriate.
        NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"created" ascending:NO];
        NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];

        [fetchRequest setSortDescriptors:sortDescriptors];

        // Set limit
        [fetchRequest setFetchBatchSize:25];
        // Set batch size
        [fetchRequest setFetchLimit:50];


        NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:kSavedStoryCache];
        aFetchedResultsController.delegate = self;
        fetchedResultsController = aFetchedResultsController;
 }
    return fetchedResultsController;
}    

在我的viewDidLoad中我有:

 NSError *error = nil;
    if (![[self fetchedResultsController] performFetch:&error]) {
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
    }

我想知道为什么我的:

- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller {

}
代表,不叫?我在里面放了一个断点。有什么想法吗?

2 个答案:

答案 0 :(得分:3)

之前我遇到过这个问题,第一次调用performFetch时没有调用此问题,但只有fetchedResultsController中的数据实际更改时才调用。例如,当您从此获取结果中的上下文中删除对象时,将调用委托。

答案 1 :(得分:0)

我认为你已经习惯了自己。在错误的地方。请参阅下面的代码;我已对更改添加了评论

 - (NSFetchedResultsController *)fetchedResultsController {
    // Set up the fetched results controller if needed.
    if (fetchedResultsController == nil) {

        NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
        // Edit the entity name as appropriate.
        NSEntityDescription *entity = [NSEntityDescription entityForName:@"DiskStory" inManagedObjectContext:self.managedObjectContext];
        [fetchRequest setEntity:entity];

        fetchRequest.predicate = [NSPredicate predicateWithFormat:@"isRemoved == %@", [NSNumber numberWithBool:NO]];

        // Edit the sort key as appropriate.
        NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"created" ascending:NO];
        NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];

        [fetchRequest setSortDescriptors:sortDescriptors];

        // Set limit
        [fetchRequest setFetchBatchSize:25];
        // Set batch size
        [fetchRequest setFetchLimit:50];


        NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:kSavedStoryCache];
        aFetchedResultsController.delegate = self;
        fetchedResultsController = aFetchedResultsController;     // -> Shouldn't be self.fetchedResultsController 
 }
    return fetchedResultsController;        // -> Shouldn't be self.fetchedResultsController 
}   

另外,如果您已经按如下方式合成 fetchedResultsController

fetchedResultsController = _fetchedResultsController 

然后在- (NSFetchedResultsController *)fetchedResultsController方法中你应该把它称为_fetchedResultsController