【问题标题】:Reload UITableView properly正确重新加载 UITableView
【发布时间】:2012-12-03 14:53:44
【问题描述】:

我这里有问题。我的应用程序将一些对象保存到 SQLite 数据库中,该数据库是我的 UITableView 的来源。一切正常,除非在运行时向我的数据库添加新对象,否则我的 UITableView 不会更新其内容。这是我的代码:

- (void)viewDidLoad
{
    [self daten];
    [super viewDidLoad];
}

-(NSMutableArray *) daten{

if (daten)
    return daten;

    self.daten = [[NSMutableArray alloc] init];

@try {
    NSFileManager *fileMgr = [NSFileManager defaultManager];
    NSString *dbPath = [self getDBPath];
    BOOL success = [fileMgr fileExistsAtPath:dbPath];
    if(!success)
    {
        NSLog(@"Cannot locate database file '%@'.", dbPath);
    }
    if(!(sqlite3_open([dbPath UTF8String], &db) == SQLITE_OK))
    {
        NSLog(@"An error has occured: %s", sqlite3_errmsg(db));

    }


    const char *sql = "SELECT * FROM  Daten";
    if(sqlite3_prepare(db, sql, -1, &sqlStatement, NULL) != SQLITE_OK)
    {
        NSLog(@"Problem with prepare statement:  %s", sqlite3_errmsg(db));
    }else{

        while (sqlite3_step(sqlStatement)==SQLITE_ROW) {
            .......
        }
    }
}
@catch (NSException *exception) {
    NSLog(@"Problem with prepare statement:  %s", sqlite3_errmsg(db));
}
@finally {
    sqlite3_finalize(sqlStatement);
    sqlite3_close(db);

    return daten;
}
}

我认为问题出在这里:

if (daten)
    return daten;

    self.daten = [[NSMutableArray alloc] init];

但是,如果我的数据库在运行时获得了一个新对象,那么我的数组此时就不是 nil 并且将在没有新对象的情况下返回!

【问题讨论】:

    标签: iphone objective-c ios


    【解决方案1】:

    很简单,只需添加:-

    [tableView reloadData];
    

    【讨论】:

    • 用 [self.daten removeAllObjects] 替换编辑的代码;然后从您的数据库中重新加载数据
    【解决方案2】:

    您可以在表格视图上调用 reloadData。

    这个问题似乎与:UITableView reload data 重复。

    【讨论】:

      【解决方案3】:

      你应该打电话给:[tableView reloadData]

      【讨论】:

        【解决方案4】:

        UITableView 有一个名为 reloadData 的方法,用于重新加载表格的行和部分。

        【讨论】:

          【解决方案5】:

          您没有展示插入新记录的过程,但您需要在此处处理重新加载的数据。如果您当时没有将 daten 设置为 nil 或将信息插入到数组中,那么您对 ​​reload 的调用将收到相同的数据,不会显示任何新数据。

          daten 是可变的,因此您可以使用

          插入新信息
          [self.daten insertObject:myInfo atIndex:myIndex];
          

          将记录成功插入数据库后的过程:

          * insert related info into your NSMutableArray.
          * insert row into tableview or reload tableview.
          

          或者,您可以将 daten 设置为 nil 并让它从原始方法重新填充。

          self.daten = nil;
          [self.tableview reloadData];
          

          假设您的 tableview 数据源方法正在返回基于 [self daten] 的值,下一次调用将重新填充数组。在这种情况下,没有理由让它可变。

          此外,没有理由在 viewDidLoad 中调用 [self daten]。当您的数据源方法请求数组时,它将根据您的访问器创建和填充。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-01-31
            • 1970-01-01
            • 2011-08-26
            • 1970-01-01
            • 2015-07-23
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多