我对 IOS 很陌生,我正在从 Web 服务获取数据。我将这些数据存储到核心数据中。目前,我正在第一个视图控制器(tableview)中加载我的所有数据。但这需要大约 10 分钟才能填满 tableview 并将所有数据存储在核心数据库中。所以我想知道最佳实践是什么。所以我想使用调度队列。但是最好的使用方法是什么?
第一种方法
- 首先存储来自第一个视图的数据
- 用这些数据填充表格视图
- 将其余数据存储在数据库中。
但是,如果您转到下一个视图并且没有加载所有数据怎么办?
第二种方法
- 从第一个视图存储数据
- 用这些数据填充表格视图?
- 当用户转到第二个视图时,存储第二个视图的数据
- 使用此数据加载第二个视图。
您始终正确存储数据,但用户仍然需要等待才能使用该应用程序。(因为没有为该视图加载数据。)
目前我正在使用第一种方法。并使用调度队列。我正在这样使用它。
- (void)fetch1:(UIManagedDocument *)document
{
dispatch_queue_t fetchQ = dispatch_queue_create("NewsFetch", NULL);
dispatch_async(dispatch_get_main_queue(), ^{
//store data in core database for firstViewController and save document.
[document saveToURL:document.fileURL forSaveOperation:UIDocumentSaveForOverwriting completionHandler:NULL];
[self loadFirstTableView];
[self fetch2];
});
dispatch_release(fetchQ);
}
- (void)fetch2:(UIManagedDocument *)document
{
dispatch_queue_t fetchAlbum = dispatch_queue_create("Album fetcher", NULL);
dispatch_async(fetchAlbum, ^{
//store data for secondViewController
[document saveToURL:document.fileURL forSaveOperation:UIDocumentSaveForOverwriting completionHandler:NULL];
dispatch_release(fetchAlbum);
}
有谁能够帮我?
亲切的问候
编辑
我如何从 web 服务获取数据的方式如下。
NSArray *news = [GenkData getNews]; //gets all the data from webservice as JSON
for (NSDictionary *genkInfo in news) {
[News newsWithGenkInfo:genkInfo inManagedObjectContext:document.managedObjectContext];
}
[document saveToURL:document.fileURL forSaveOperation:UIDocumentSaveForOverwriting completionHandler:NULL];
这就是我设置表格视图的方式。
- (void)setupFetchedResultsController // attaches an NSFetchRequest to this UITableViewController
{
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"News"];
request.sortDescriptors = [NSArray arrayWithObjects:[NSSortDescriptor sortDescriptorWithKey:@"date" ascending:YES],nil];
self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request
managedObjectContext:self.genkDatabase.managedObjectContext
sectionNameKeyPath:nil
cacheName:nil];
}