我正在使用NSFetchedResultsController将数据填充到UITableView。 这是一个简单的聊天应用程序,我想先载入最新的25条消息到桌子上,然后加载更多的用户滚动查看旧信息(聊天信息按升序排列)。为NSFetchedResultsController动态设置fetchLimit
我打电话,这将setFetchLimit的方法:对于NSFetchedResultsController在willDisplayCell:像这样....
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
if(indexPath.row == 0)
{
[self performSelector:@selector(getMoreMessages) withObject:nil afterDelay:1.0];
}
}
时已经显示的UITableView的第一行,getMoreMessages将尝试重置fetchLimit像这样重新加载UITableView .....
- (void)getMoreMessages
{
maxListItems += 25;
NSLog(@"set maxListItems: %d", maxListItems);
[self.resultsController.fetchRequest setFetchLimit:maxListItems];
[self._tableView reloadData];
}
但是,它似乎没有工作,表数据不会改变。 初始NSFetchRequest设置是这样的...
NSFetchRequest *chatDataRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"ChatData" inManagedObjectContext:appDelegate.managedObjectContext];
[chatDataRequest setEntity:entity];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(key != 0 OR messageNo != 0) and matchNo = %d", matchNo];
[chatDataRequest setPredicate:predicate];
NSSortDescriptor *sortDescripter1 = [[NSSortDescriptor alloc] initWithKey:@"status" ascending:YES];
NSSortDescriptor *sortDescripter2 = [[NSSortDescriptor alloc] initWithKey:@"messageNo" ascending:YES];
NSArray *sortDescripters = [[NSArray alloc] initWithObjects:sortDescripter1, sortDescripter2, nil];
[chatDataRequest setSortDescriptors:sortDescripters];
[sortDescripters release];
[sortDescripter1 release];
[sortDescripter2 release];
[chatDataRequest setFetchLimit:25];
NSFetchedResultsController *fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:chatDataRequest managedObjectContext:appDelegate.managedObjectContext sectionNameKeyPath:nil cacheName:[NSString stringWithFormat:@"%d_chat.cache", matchNumber]];
[chatDataRequest release];
fetchedResultsController.delegate = self;
NSError *error;
BOOL success = [fetchedResultsController performFetch:&error];
if(!success) NSLog(@"error: %@", error);
self.resultsController = fetchedResultsController;
并回到刚才的问题。
如何动态更改NSFetchedResultsController的fetchLimit?
任何命中将是真棒! 谢谢!
另外,请确保您重新加载UITableView后缀 –
它与uifetchedresultscontrollerdelegate控制器配合使用:didChangeObject:atIndexPath:forChangeType:newIndexPath:?不适合我=( – Irina
你需要调用[NSFetchedResultsController deleteCacheWithName:@“cacheName”]在执行此操作之前,Apple文档NSFetchedResultsController.fetchRequest指出:“您不得更改它,它的谓词或其排序描述符初始化后不禁用缓存或调用+ deleteCacheWithName“ –