O método a seguir é chamado para preencher meus Core-Data
depois que o AFNetworking
busca informações do meu servidor de aplicativos.
As informações parecem estar funcionando perfeitamente, pois quando a tabela é atualizada, posso ver as novas informações sendo atualizadas no UITableView
.
Agora, o problema que tenho é que mesmo eu posso ver as informações (depois de ter sido obtido a partir do servidor, armazenados em dados-core e refetches para exibir no meu UITableView
) Se eu, em seguida, ir e fechar meu aplicativo e ab aberto , a informação não está mais lá.
Parece que a informação não é persistente e o problema parece ser o tópico. dado que se eu remover a opção de thread no meu método tudo funciona bem.
O que estou perdendo?? Eu tentei a maioria das coisas que me deparei, mas não consigo encontrar uma solução.
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]; }];
Você tem que salvar o contexto principal também em algum momento, por exemplo, depois de salvar o contexto filho.
Salvar o contexto filho salva apenas no contexto principal e salvar o contexto principal salva no arquivo de armazenamento.
Assim (escrito no telefone, haverá erros de syntax):
// ... [childContext save:&error]; [mainContext performBlock:^{ [mainContext save:&error]; }];
No Swift 2.0, isso seria:
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)") }