gpt4 book ai didi

iphone - 何时触发将 StackMob 初始数据下载到 CoreData 应用程序

转载 作者:行者123 更新时间:2023-11-29 13:46:23 27 4
gpt4 key购买 nike

大家好

我正在开发一个 CoreData 驱动的应用程序,该应用程序以我从 StackMob 填充的空 CoreData 存储开始申请。

我有一个 UITableView 的子类,它可以按我想要的方式获取和显示我的数据,但我对何时最好从 StackMob 获取初始数据感到有点困惑。当我在 applicationDidFinishLaunching 中触发填充我的 CoreData 存储(从一个小的 plist 文件并且仅用于测试 View )时,我的应用程序花了很长时间显示默认屏幕,我预计从网络获取的真实数据会更长。我正在考虑在我的 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 因为我正在从实体中获取所有数据。

是一个好的方法吗?如果不是,什么是更好的方法?

我希望能提供一种用户体验,就像我在我使用的一些应用程序中看到的那样,当项目被下载并添加到 CoreData 存储时,它们会出现在“主”屏幕上。

干杯 & TIA,佩德罗 :)

最佳答案

首先,创建一个 NSPredicate 以从 Core Data 中获取您的信息(假设它是一个 NSSet,在本例中):

NSMutableSet yourMutableDataSetYouGotFromCoreData = [self.yourCoreDataObject mutableSetValueForKey:@"yourCoreDataSetData"];

NSPredicate *yourDataFilter = [NSPredicate predicateWithFormat:@"SELF IN %@",yourMutableDataSetYouGotFromCoreData];

接下来,使用谓词创建您的 fetche 结果 Controller

// Fetched results controller
NSFetchedResultsController *yourFetchedResults = [YOURCOREDATAOBJECT fetchRequestAllGroupedBy:nil
withPredicate:supplyRegisterFilter];

接下来,将此信息提供给您的表格

[self.yourTable updateTableData:yourFetchedResults];

现在,在您的表中,您创建单元格数据内容的地方 - 使用类似这样的东西从您的获取结果 Controller 中获取数据

-(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];
}

关于iphone - 何时触发将 StackMob 初始数据下载到 CoreData 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7248028/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com