2

调用以下方法以在从我的应用服务器获取信息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];
}];
4

1 回答 1

14

您还必须在某些时候保存主上下文,例如在保存子上下文之后。

保存子上下文只保存到主上下文,保存主上下文保存到存储文件。

像这样(手机上写的,会有语法错误):

// ...
[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)")
}
于 2013-10-11T22:56:00.993 回答