我已经苦恼了一段时间,但是苹果的文档和stackoverflow都没有帮助到我。我之前使用的是UIManagedDocument上的ManagedObjectContext并且下面的代码可以正常工作。后来我决定在AppDelegate中使用Apple的CoreData模板,所以model、persistent store coordinator和context都是在AppDelegate中创建的。使用AppDelegate的context进行获取没有问题,但是在保存时有问题。根据Apple的建议,我应该在保存的线程上拥有本地context,并且使用相同的持久化存储协调器。但是以下代码实际上并没有保存数据。请问这里是否有人可以提供建议?谢谢。
- (void)fetchAndPersist
{
dispatch_queue_t ffetchQ = dispatch_queue_create("ForFetch", NULL);
dispatch_async(ffetchQ, ^{
NSManagedObjectContext *secureManagedObjectContext;
NSPersistentStoreCoordinator *coordinator = [appDelegate persistentStoreCoordinator];
if (coordinator != nil) {
secureManagedObjectContext = [[NSManagedObjectContext alloc] init];
[secureManagedObjectContext setPersistentStoreCoordinator:coordinator];
}
// find missing date
DataManager *dataManager = [[DataManager alloc] init];
NSDate *missingDate = [dataManager findMissingDateFromDate:selectedDate inContext:secureManagedObjectContext];
if (missingDate) {
// fetch and parse data
DataFetcher *dataFetcher = [[dataFetcher alloc] init];
NSDictionary *fetchResponse = [dataFetcher parseDataForDate:missingDate];
// persist it in a block and wait for it
[secureManagedObjectContext performBlock:^{
DataStore *dataStore = [[DataStore alloc] init];
BOOL parsingError = [dataStore persistData:fetchResponse inContext:secureManagedObjectContext];
if (parsingError) {
// handle error
} else {
dispatch_async(dispatch_get_main_queue(), ^{
// perform on main
[self fetchAndPersist];
});
}
}];
}
});
}