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ď č. 1V 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)")
}