G'全部
我正在使用CoreData驱动的应用程序,该应用程序以我从StackMob应用程序填充的空CoreData存储开始。
我有一个UITableView的子类,它取出&按照我的要求提供我的数据,但我有点困惑于何时最好从StackMob获取初始数据。当我在applicationDidFinishLaunching中触发填充我的CoreData商店(来自一个小的plist文件并且仅用于测试视图)时,我的app花了很长时间显示默认屏幕&我希望从网上获取真实数据会更长。我正在考虑在我的UITableView子类上更改此方法......
- (NSFetchedResultsController *)frc
{
if (_frc) return _frc;
...
return _frc;
}
为...
- (NSFetchedResultsController *)frc
{
if (_frc) return _frc;
...
if ([[_frc fetchedObjects] count] == 0) {
// Spawn NSOperation to get initial data from StackMob.
// & use it to populate my CoreData store.
}
return _frc;
}
在这种情况下,我将NSOperation作为一个子类,我可以将其重新用于后续数据更新。
我正在使用[[_frc fetchedObjects] count] == 0
进行核对,因为我正在从实体中获取所有数据。
采取好的方法吗?如果不是更好的方法呢?
我希望能够提供一种用户体验,就像我在某些应用中看到过的用户体验一样,这些应用会出现在' home'屏幕,因为它是下载&添加到CoreData商店。
干杯& TIA,佩德罗:)
答案 0 :(得分:1)
首先,创建一个NSPredicate来从Core Data中获取您的信息(假设它是一个NSSet,在这种情况下):
NSMutableSet yourMutableDataSetYouGotFromCoreData = [self.yourCoreDataObject mutableSetValueForKey:@"yourCoreDataSetData"];
NSPredicate *yourDataFilter = [NSPredicate predicateWithFormat:@"SELF IN %@",yourMutableDataSetYouGotFromCoreData];
接下来,使用谓词
创建fetche结果控制器// Fetched results controller
NSFetchedResultsController *yourFetchedResults = [YOURCOREDATAOBJECT fetchRequestAllGroupedBy:nil
withPredicate:supplyRegisterFilter];
接下来,将此信息提供给您的表格
[self.yourTable updateTableData:yourFetchedResults];
现在,在您创建单元格数据内容的表中 - 使用类似这样的内容从获取的结果控制器中获取数据
-(void) updateTableData:(NSFetchedResultsController*)fetched
{
self.fetchedResultsController = fetched;
if(self.fetchedResultsController)
[self.tableView reloadData];
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [self.fetchedResultsController.fetchedObjects count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
YourCustomCellType *cell = (YourCustomCellType *) [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (!cell)
{
NSArray *topLevelItems = [cellLoader instantiateWithOwner:self options:nil];
cell = [topLevelItems objectAtIndex:0];
}
[self configureCellData atIndexPath:indexPath];
return cell;
}
- (void) configureCellData:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath
{
YourCustomCellType *customCell = (YourCustomCellType *)cell;
id obj = [[fetchedResultsController fetchedObjects] objectAtIndex:indexPath.row];
[customCell setCellDataFromId:obj];
}