ios coredata актуализации, които не се виждат в различни контексти на управляван обект - данните са различни в контекстите

Имаме този проблем, при който различните нишки виждат различни данни в едни и същи записи, но с различен контекст на управляван обект (moc). Нашето приложение се синхронизира във фонов режим със сървърен API. Цялото синхронизиране се извършва на собствена нишка и се използва собствена moc. Открихме обаче, че когато данните се актуализират на главния moc, промяната в данните не се показва на фона moc. Някакви идеи какво може да се случи? Ето още подробности: използваме така централната централна експедиция, за да поставим операциите за синхронизиране върху собствената си нишка: Проверихме на коя опашка се изпълняват нещата и всичко се случва в очакваната опашка.

- (void) executeSync; {

    dispatch_async(backgroundQueue, ^(void) {
        if([self isDebug])
            NSLog(@"ICSyncController: executeSync queue:%@ \n\n\n\n\n", [self queue]);


       for(id <ICSyncControllerDelegate> delegate in delegates){
           [delegate syncController:self];
       }
        if([ICAccountController sharedInstance].isLoggedIn == YES && shouldBeSyncing == YES) {
            dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 300ull * NSEC_PER_SEC), dispatch_get_current_queue(), ^{
                [self executeSync];
            });
        }

    }); 
}

ето как създайте фоновия moc и ние потвърдихме, че той е създаден във фоновата опашка.

- (NSManagedObjectContext*)backgroundObjectContext {

    if (_backgroundObjectContext)
        return _backgroundObjectContext;

    _backgroundObjectContext = [[NSManagedObjectContext alloc] init];    
    [_backgroundObjectContext setPersistentStoreCoordinator:self.persistentStoreCoordinator];
    [_backgroundObjectContext setStalenessInterval:0.0];

    return _backgroundObjectContext;
}

Трябва да добавя, че нашият фонов moc изисква заявки за данни и тези записи, върнати от това действие, все още имат старите стойности за някои полета. Как фоновият moc получава текущите данни, които вече са били запазени от основния moc? Мислех, че само чрез повторно заявяване ще получа текущото състояние на тези записи ..

под повторно заявяване имам предвид следното: Фоновият MOC изпълнява друга "заявка", за да получи "свежи" данни, след като записите са били променени от главния moc, но данните имат стари стойности - не актуализираните стойности, които се виждат в основния moc.

+ (NSArray *)dirtyObjectsInContext:(NSManagedObjectContext *)moc {
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SUBQUERY(memberships, $m, $m.category.name == %@ AND $m.syncStatus > %d).@count > 0", MANAGED_CATEGORY_FAVORITES, ManagedObjectSynced];

    return [self managedObjectsWithPredicate:predicate inContext:moc];
}

Вашата помощ е изключително ценена, тъй като се опитваме да разберем това или да намерим някаква работа, която не включва изхвърляне на нишките ни от дни.

5
задан Erica F 10 August 2011 в 19:29
поделиться