2013-10-02 76 views
0

我想实现一个功能,当点击uitabbar上的刷新按钮时,会调用一个返回特定数据的web服务。数据存储在sqlite数据库,然后呈现在桌面上。我的问题是,当从服务中获取新数据时,数据库会更新,但更新的记录不会立即显示在tableview中。我必须重新启动应用程序才能看到更新的记录。下面是我的代码被称为轻敲Reload按钮:在按钮上刷新uitableview点击从webservice获取数据

更新的代码:

-(void)get_vrns { 
    NSLog(@"Refreshing..."); 
    NSString *delete = [NSString stringWithFormat:@"DELETE FROM VRN"]; 
    NSString *insert = [NSString stringWithFormat:@"INSERT INTO VRN ('VRNumber') VALUES ('%@')", @"LEC8-9436"]; 
    insert = @"INSERT INTO VRN ('VRNumber') VALUES ('LEC-876'); INSERT INTO VRN ('VRNumber') VALUES ('AAA-564');INSERT INTO VRN ('VRNumber') VALUES ('ABD-908'); INSERT INTO VRN ('VRNumber') VALUES ('AHF-540');"; 

    char *err; 
    if (sqlite3_exec(db, [delete UTF8String], NULL, NULL, &err) == SQLITE_OK) { 
     if (sqlite3_exec(db, [insert UTF8String], NULL, NULL, &err) != SQLITE_OK) { 
      sqlite3_close(db); 
      NSAssert(0, @"Could not update table"); 
     } 
     else { 
      NSLog(@"Table updated"); 
     } 
    } 
    else { 
     sqlite3_close(db); 
     NSAssert(0, @"Could not delete records"); 
    } 
    [self.vrnTable reloadData]; 
    NSString *select = [NSString stringWithFormat:@"SELECT VRNumber FROM VRN"]; 
    sqlite3_stmt *statement; 

    if (sqlite3_prepare_v2(db, [select UTF8String], -1, &statement, nil) == SQLITE_OK) { 
     while (sqlite3_step(statement) == SQLITE_ROW) { 
      char *vrn = (char *) sqlite3_column_text(statement, 0); 
      NSString *vrnStr = [[NSString alloc] initWithUTF8String:vrn]; 

      NSString *str = [[NSString alloc] initWithFormat:@"%@", vrnStr]; 
      [_entries addObject:str]; 
     } 
    } 
    else { 
     NSAssert1(0, @"Error: Because %s", sqlite3_errmsg(db)); 
    } 
    NSLog(@"%@", self.entries); 
} 
+0

显示reloadData方法 –

+0

其在UITableView的 –

+0

一个类的方法尝试调用[vrnTable reloadData],而不是线程 –

回答

0

想知道你在哪里存储数据在tableview中显示。我的意思是我们通常使用NSArray来存储tableview的数据,在tableView中使用它:cellForRowAtIndexpath:方法我们从数组中获取数据并将其放在单元格中。你是从sqlite表或你正在使用的其他变量更新数组。

更新的代码:

-(void)get_vrns { 
    NSLog(@"Refreshing..."); 
    NSString *delete = [NSString stringWithFormat:@"DELETE FROM VRN"]; 
    NSString *insert = [NSString stringWithFormat:@"INSERT INTO VRN ('VRNumber') VALUES ('%@')", @"LEC8-9436"]; 
    insert = @"INSERT INTO VRN ('VRNumber') VALUES ('LEC-876'); INSERT INTO VRN ('VRNumber') VALUES ('AAA-564');INSERT INTO VRN ('VRNumber') VALUES ('ABD-908'); INSERT INTO VRN ('VRNumber') VALUES ('AHF-540');"; 

char *err; 
if (sqlite3_exec(db, [delete UTF8String], NULL, NULL, &err) == SQLITE_OK) { 
    if (sqlite3_exec(db, [insert UTF8String], NULL, NULL, &err) != SQLITE_OK) { 
     sqlite3_close(db); 
     NSAssert(0, @"Could not update table"); 
    } 
    else { 
     NSLog(@"Table updated"); 
    } 
} 
else { 
    sqlite3_close(db); 
    NSAssert(0, @"Could not delete records"); 
} 

[self.entries removeAllObjects]; 

NSString *select = [NSString stringWithFormat:@"SELECT VRNumber FROM VRN"]; 
sqlite3_stmt *statement; 

if (sqlite3_prepare_v2(db, [select UTF8String], -1, &statement, nil) == SQLITE_OK) { 
    while (sqlite3_step(statement) == SQLITE_ROW) { 
     char *vrn = (char *) sqlite3_column_text(statement, 0); 
     NSString *vrnStr = [[NSString alloc] initWithUTF8String:vrn]; 

     NSString *str = [[NSString alloc] initWithFormat:@"%@", vrnStr]; 
     [_entries addObject:str]; 
    } 
} 
else { 
    NSAssert1(0, @"Error: Because %s", sqlite3_errmsg(db)); 
} 
NSLog(@"%@", self.entries); 

[self.vrnTable reloadData]; 

} 
+0

是的。我正在更新来自sqlite的数据。我想要做的是在点击刷新按钮时,tableview变得清晰,一个服务被调用,并且表格中充满了最新的数据。 –

+0

@HassanZaheer在从sqlite获取数据到你的_entries变量之后,调用方法结束时的tableView reloadData函数。在输入变量之前,您正在调用reloaddata。 –

+0

这只会将新数据添加到表格中。在使用新数据填充tableview之前,我必须删除以前的数据。 –