2012-10-22 33 views
1

我有以下代码:NSFetchResultsController委托不获取调用

- (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 { 

} 

委托,ISN不叫?我在里面放了一个断点。任何想法?

+0

你在' - (NSFetchedResultsController *)fetchedResultsController'中放置了一个断点吗?你确定你的初始化正在运行吗? – Don

+0

是的,我在那里放了一个断点,它会一直持续到 – adit

+0

并且你解决了这个问题吗? –

回答

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

+0

我已经根据你的修改改变了它,但它没有帮助..委托仍然没有被调用。我在执行fetchRequest后放置了一个断点,它不是零 – adit

+0

我也将它合成为fetchedResultsController – adit

+0

提取多少节或记录? – user427969

2

我有此问题之前,它不会在您首次拨打performFetch时调用,但仅当fetchedResultsController中的数据实际发生更改时才会调用。例如,当您从该提取结果中的上下文中删除对象时,将调用委托。

+0

无赖......所以我该如何解决这个问题?我用于表视图数据源的数据得到错误的状态..因为我需要调用reloadData后取回完成 – adit

+0

我通过发布通知后初始提取完成解决它。然后在我的'UIViewController'中我重新加载了我的组件。 –

+0

您怎么知道初始抓取完成了? – adit