Core data 在块内使用神奇记录保存数据
我正在从API资源中检索一些数据,我想使用Magic Record将结果存储在我的城市实体中,当过程完成时,将结果重新加载到我的ViewController中的tableView中 一切都很好,但当我第一次启动应用程序时,dowload过程启动,数据保存在核心数据中。 但是我的ViewController中的表视图是空的 如果我在第一次之后启动应用程序 tableView将正确刷新 我不知道问题是否在线程中。。。有人能帮我吗 视图控制器: 在这里我开始请求。调用block时,我存储cities数组并重新加载tableViewCore data 在块内使用神奇记录保存数据,core-data,magicalrecord-2.2,Core Data,Magicalrecord 2.2,我正在从API资源中检索一些数据,我想使用Magic Record将结果存储在我的城市实体中,当过程完成时,将结果重新加载到我的ViewController中的tableView中 一切都很好,但当我第一次启动应用程序时,dowload过程启动,数据保存在核心数据中。 但是我的ViewController中的表视图是空的 如果我在第一次之后启动应用程序 tableView将正确刷新 我不知道问题是否在线程中。。。有人能帮我吗 视图控制器: 在这里我开始请求。调用block时,我存储citie
- (void)getCitiesFromDataStore {
[[APIManager sharedManager] getCitiesWithCompletion:^(NSArray *cities) {
_dataSourceArray = cities;
[self.citiesTableView reloadData];
} failure:^(NSError *error) {
NSLog(@"%@",error.localizedDescription);
}];
}
APIMAnager
- (void)getCitiesWithCompletion:(void (^)(NSArray *))succesBlock
failure:(void (^)(NSError *))errorBlock
{
NSArray *cachedCities = [City findAllCities];
if ([cachedCities count] == 0) {
[self GET:@"cities" parameters:nil success:^(NSURLSessionDataTask *task, id responseObject) {
NSArray *results = responseObject[@"cities"];
[City MR_importFromArray:results];
[[NSManagedObjectContext MR_defaultContext] MR_saveToPersistentStoreAndWait];
NSArray *cities = [City findAllCities];
succesBlock(cities);
} failure:^(NSURLSessionDataTask *task, NSError *error) {
errorBlock(error);
}];
return;
}
// Si ya hay ciudades almacenadas en CoreData, devuelvo el
// succesblock con las ciudades de CoreData
succesBlock(cachedCities);
}
我还有一个类别来管理城市实体的行动
城市+数据库运营
+ (NSArray *)findAllCities
{
NSArray *cities = [City MR_findAll];
return cities;
}
我知道你说过你解决了这个问题,但是对于其他可能会来这里的人,你可以尝试的另一件事是将导入包装在
saveWithBlock:completion:
中,并在completion块中查找
还要确保您知道每个方法使用的上下文。明确地表达这一点通常是有帮助的
因此,您可以将其更改为(这未经测试,但应给出概念):
您是否尝试在导入中指定默认上下文<代码>[City MR_importFromArray:results inContext:[NSManagedObjectContext MR_defaultContext]]。从我的Pod文件中删除魔法记录并从魔法记录github手动将库导入到我的项目中,问题已经解决page@dpbataller-我不确定你的分数是否足够高,但是,如果你解决了自己的问题,你应该继续把它作为一个实际的答案,并把它作为这样的标记。这样人们就知道你把它修好了。
[self GET:@"cities" parameters:nil success:^(NSURLSessionDataTask *task, id responseObject) {
NSArray *results = responseObject[@"cities"];
[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) {
[City MR_importFromArray:results inContext:localContext];
} completion:^(BOOL contextDidSave, NSError *error) {
NSArray *cities = [User MR_findAllInContext:[NSManagedObjectContext MR_defaultContext]];
succesBlock(cities);
}];
} failure:^(NSURLSessionDataTask *task, NSError *error) {
errorBlock(error);
}];