/ / NSPrivateQueueConcurrencyType Neskladá sa správne - objektív-c, kakao-touch, kakao, základné údaje, nsmanagedobject

NSPrivateQueueConcurrencyType Nešetrí správne - objektív-c, kakao-dotyk, kakao, základné údaje, nsmanagedobject

Nasledujúca metóda sa nazýva, aby sa naplnil môj Core-Data po AFNetworking načíta informácie z môjho aplikačného servera.

Zdá sa, že táto informácia je dokonale funkčná, pretože po aktualizácii tabuľky vidím nové informácie aktualizované v UITableView.

Teraz mám problém s tým, že tieto informácie vidím aj potom, čo boli načítané zo servera, uložené do Core-data a načrtnuté, aby sa zobrazili v mojich UITableView) Ak potom otvorím svoju aplikáciu a znova ju otvorím, informácie už neexistujú.

Zdá sa, že informácia nie je perzistentná a zdá sa, že problémom je vlákno. vzhľadom na to, že ak odstránim možnosť vlákna v mojej metóde, všetko funguje dobre.

Čo mi chýba? Skúsil som väčšinu vecí, s ktorými som sa stretol, ale zdá sa mi, že nájsť riešenie.

NSManagedObjectContext *childContext = [[NSManagedObjectContext alloc]
initWithConcurrencyType:NSPrivateQueueConcurrencyType];
childContext.parentContext = managedObjectContext;
myModel.context = childContext;


[childContext performBlock:^{
// ... Lots Controller logic code that then calls the class myModel where all my Core-Data save methods are

// Sort Wall Pictures
if ( [dataHolder[@"verb"] isEqualToString:@"addWallPicture"] ) {
data = @{  @"resourceID":dataHolder[@"_id"][@"$id"],
@"resourceName":dataHolder[@"details"][@"resourceName"],
@"author":@{ @"id":dataHolder[@"userId"][@"$id"],
@"username":dataHolder[@"details"][@"authorName"] },
@"likesNumber":@0,
@"likesPeople":@[]
};

[myModel saveSocialWall:data date:date verb:dataHolder[@"verb"] code:dataHolder[@"_id"][@"$id"] myUser:myUser];
continue;
}
[childContext save:&error];
}];

odpovede:

11 pre odpoveď č. 1

V určitom okamihu musíte tiež uložiť hlavný kontext, napr. po uložení kontextu dieťaťa.

Uloženie podradeného kontextu sa uloží iba do hlavného kontextu a uloženie hlavného kontextu sa uloží do súboru úložiska.

Takto (napísané na telefóne tam bude) byť syntaktické chyby):

// ...
[childContext save:&error];
[mainContext performBlock:^{
[mainContext save:&error];
}];

v Swift 2.0 to by bolo:

do {
try childContext.save()
mainContext.performBlock {
do {
try mainContext.save()
} catch let err as NSError {
print("Could not save main context: (err.localizedDescription)")
}
}
} catch let err as NSError {
print("Could not save private context: (err.localizedDescription)")
}