调用以下方法,以便在Core-Data
从我的应用服务器获取信息后填充AFNetworking
。
信息似乎完全正常,因为表格更新时我可以看到UITableView
中的新信息正在更新。
现在我遇到的问题是,即使我可以看到信息(从服务器获取信息,存储到核心数据并重新获取以显示在我的UITableView
中)如果我然后去关闭我的应用程序并重新打开它,信息不再存在。
似乎信息不是持久性的,问题似乎是线程。鉴于如果我在我的方法中删除线程选项,一切正常。
我错过了什么?我尝试了大多数我遇到的事情,但似乎无法找到解决方案。
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];
}];
答案 0 :(得分:12)
您必须在某些时候保存主要上下文,例如保存子上下文后。
保存子上下文仅保存到主上下文,并保存主上下文保存到商店文件。
像这样(写在手机上,会有 是语法错误):// ...
[childContext save:&error];
[mainContext performBlock:^{
[mainContext save:&error];
}];
在 Swift 2.0 中:
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)")
}