【发布时间】:2012-03-05 14:56:12
【问题描述】:
我正在开发一个应用程序,该应用程序需要通过在 tableview 中无限滚动来加载超过 100 万个条目。每次请求将发送 1000 个条目,一旦通过 JSON 库下载和解析数据,表就会重新加载。我已经通过 CoreData 使用“setFetchBatchSize = 1000”实现了这一点。
StreamModal *modal = [[StreamModal alloc]init];
StreamModal *modal = [NSEntityDescription insertNewObjectForEntityForName:@"StreamModal" inManagedObjectContext:managedObjectContext];
if([self isNotNull:[streamDataDict objectForKey:@"_id"]])
modal.stream_id = [streamDataDict objectForKey:@"_id"];
-(void)reloaData{
@try {
NSError *error;
if (![[self fetchedResultsController] performFetch:&error]) {
// Update to handle the error appropriately.
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
exit(-1); // Fail
}
NSLog(@"ferchresults count %d",[[_fetchedResultsController fetchedObjects]count]);
}
@catch (NSException *exception) {
NSLog(@"exception raised in reloadData in streamViewController class %@",exception);
}
@finally {
}
}
- (NSFetchedResultsController *)fetchedResultsController {
if (_fetchedResultsController != nil) {
return _fetchedResultsController;
}
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"StreamModal" inManagedObjectContext:appDelegate.managedObjectContext];
[fetchRequest setEntity:entity];
NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"date" ascending:NO];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]];
[fetchRequest setFetchBatchSize:1000];
//[fetchRequest setFetchLimit:2000];
NSFetchedResultsController *theFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:appDelegate.managedObjectContext sectionNameKeyPath:nil cacheName:nil];
self.fetchedResultsController = theFetchedResultsController;
_fetchedResultsController.delegate = self;
fetchRequest = nil;
theFetchedResultsController = nil;
return _fetchedResultsController;
}
这是我正在使用的代码,当连接完成加载数据时,我将数据填充到 NSManagedObject 类(StreamModal)中,然后调用重新加载数据。这里的问题是应用程序在我在表中加载 12000 个条目后出现内存异常,并且崩溃。我如何加载所有条目而不会出现内存异常。我是 CoreData 概念的新手,并且通过开发人员指南阅读了核心数据概念,但我没有找到任何与内存处理相关的信息。请帮我。
【问题讨论】:
-
用拇指在 iPhone 屏幕上滚动一百万行需要多长时间?这看起来很荒谬。
-
天啊。谁是客户?我很想认识他/她? 100 万个条目?
-
据我所知,我可以说最好在每次用户滚动或任何其他事件时下载部分数据,否则设备中的内存是有限的,因此它不会允许加载太多数据一次......
-
提供索引并向下钻取。 4 英寸屏幕上的单个表格中的数百万行是可笑的。
-
包裹 NSError 的异常处理程序是怎么回事?
标签: iphone objective-c uitableview core-data