Можем ли мы создать столько дочерних NSManagedObjectContext, сколько нам нужно? в iOS Obj c - PullRequest
0 голосов
/ 27 мая 2020

В моем проекте iOS Objective C у меня есть требование загрузить некоторые данные в облако, и как только мы получим ответ, обновите serverId в моих записях, которые находятся в основных данных

, следующее: updateDetailsIntoCoreData ', который я написал, где я каждый раз создаю новый дочерний NSManagedObjectContext, а updateDetailsIntoCoreData вызывается для каждого объекта ответа, т.е. скажем, если я загружаю 100 пакетов на сервер, я получаю 100 ответов обратно, а метод updateDetailsIntoCoreData вызывается 100 раз, поэтому создается 100 дочерних NSManagedObjectContexts, и все 100 записей обновляются в основных данных должным образом, но здесь я думаю, что делаю что-то не так можно ли создать много (например, 100 в этом case) child NSManagedObjectContexts ?

Я также попытался создать единственный дочерний NSManagedObjectContext и передал его методу updateDetailsIntoCoreData, но в этом случае все мои 100 записей не были обновлены должным образом на сервере детали, но были обновлены только несколько строк.

- (void)updateDetailsIntoCoreData:(MyModel *)session
              callBackHandler:(void (^)(Error))completionHandler
{
    NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:self.entityName];
    NSPredicate *predicate=[NSPredicate predicateWithFormat:@"id==%@",session.id];
    [fetchRequest setPredicate:predicate];
    NSManagedObjectContext *updateContext = [self createPrivateManagedObjectContext];
    __weak typeof(self) weakSelf = self;
    [updateContext performBlock:^{
        __strong typeof(self) strongSelf = weakSelf;
        NSArray *data = [updateContext executeFetchRequest:fetchRequest error:nil];
        if (data.count) {
            MyEntity *entity=[sessions lastObject];
            [strongSelf setServer Values:entity withSession:session];
            NSError *error = nil;
            [updateContext save:&error];
            [strongSelf.managedObjectContext performBlockAndWait:^{
                //Save with CompletionHandler
                [strongSelf saveContext:completionHandler];
            }];
        }else{
            completionHandler(error);
        }
    }];
}

createPrivateManagedObjectContext Метод

-(NSManagedObjectContext *)createPrivateManagedObjectContext{
    NSManagedObjectContext *privateContext = [[NSManagedObjectContext alloc]initWithConcurrencyType: NSPrivateQueueConcurrencyType];
    [privateContext performBlockAndWait:^{
        [privateContext setParentContext:self.managedObjectContext];
    }];
    return privateContext;
}
...