0

我的问题是:我必须在视图的哪个函数中执行代码并确保前面视图的所有工作都已完成?保存的所有数据以及其他?

这是我的情况,让我问这个问题:我有三个视图 1)出发岛 2)到达岛 3)地图

在出发岛上,您可以选择从哪个岛出发,在您想到达的目的地时,在地图上,您可以直观地看到到达目的地所必须遵循的路线。以编程方式,我有前两个视图,它们是两个表视图(岛屿名称字符串列表),第三个是一个简单的图像视图,它有一个在其上绘制路线的系统。我将数据保存到一个简单的 sql 数据库,但我在使用 NSUserDefaults 更简单地保存数据时遇到了同样的问题。两个表视图保存在他们选择的岛

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
     NSString *islandChoosen= [departureIsland objectAtIndex:indexPath.row];
     [[IslandDatabase database] saveOneRecord:@"1" name:arrivalIslandChoosen];
}

在 IslandDatabase 类中

- (void) saveOneRecord:(NSString *)id name:(NSString *)name {

    NSLog(@"Saving data Partenza");
    sqlite3_stmt *statementINSERT;
    NSString somedataToInsertContainingNameofTheIsland;

    NSString *insertSQL = [NSString stringWithFormat: @"INSERT INTO aTable somedataToInsertContainingNameofTheIsland"; 
    NSLog(@"%@", insertSQL);

    sqlite3_prepare_v2(database,[insertSQL UTF8String], -1, &statementINSERT, NULL);
    sqlite3_step(statementINSERT);
    sqlite3_finalize(statementINSERT);

} *为简单起见,省略实际查询的代码

现在,当我选择第二个岛屿时,我继续前往地图,在地图的 viewDidLoad 上,我尝试获取选择的两个岛屿的数据以构建我的路线。这就是问题所在。我可以得到选择的第一个岛屿的数据,但不能得到第二个岛屿的数据,这是时间问题。

我做了很多测试,似乎我在第二个视图(到达岛)的 didSelectRowAtIndexPath 中保存的数据实际上在第三个视图(地图)的 viewDidLoad之后完成,没有给我时间获取数据当我需要它们时,我执行在 viewDidLoad 中绘制路线的代码。我在真正将数据写入数据库时​​调用的 NsLog 恰好在地图视图设计和启动后显示。

我试图在第三个视图 viewDidLoad 开始时做一段时间,一直持续到第二个岛的数据可用但我没有运气..它似乎只是在设计第三个视图之前被卡住了......

4

1 回答 1

0

您应该尝试使用- (void)viewWillAppear:(BOOL)animated而不是在第三个视图中加载数据- (void)viewDidLoad吗?

viewDidLoad当控制器将其层次结构加载到内存中时调用该方法,这会急切地优化性能。

于 2012-05-14T13:43:06.910 回答