Core data 在块内使用神奇记录保存数据

Core data 在块内使用神奇记录保存数据,core-data,magicalrecord-2.2,Core Data,Magicalrecord 2.2,我正在从API资源中检索一些数据,我想使用Magic Record将结果存储在我的城市实体中,当过程完成时,将结果重新加载到我的ViewController中的tableView中 一切都很好,但当我第一次启动应用程序时,dowload过程启动,数据保存在核心数据中。 但是我的ViewController中的表视图是空的 如果我在第一次之后启动应用程序 tableView将正确刷新 我不知道问题是否在线程中。。。有人能帮我吗 视图控制器: 在这里我开始请求。调用block时,我存储citie

我正在从API资源中检索一些数据,我想使用Magic Record将结果存储在我的城市实体中,当过程完成时,将结果重新加载到我的ViewController中的tableView中

一切都很好,但当我第一次启动应用程序时,dowload过程启动,数据保存在核心数据中。

但是我的ViewController中的表视图是空的

如果我在第一次之后启动应用程序

tableView将正确刷新

我不知道问题是否在线程中。。。有人能帮我吗

视图控制器

在这里我开始请求。调用block时,我存储cities数组并重新加载tableView

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