2011-08-25 26 views
0

我有一个SQL数据库,可以在UITableView上显示。但是如果尝试添加任何对象,它不会在UITableView中更新。只有在应用程序重新启动后才会更新。 当我从UITableView删除对象有内置的方法,删除 是if (editingStyle == UITableViewCellEditingStyleDelete)有没有这样的方法 也添加对象呢?使用SQlite数据库添加的对象在UITableView中未更新

我的另外方法如下:

static sqlite3 *addStmt = nil; 

- (void) add_Place:(Place *)PlaceObj { 

    NSLog(@"Super add called"); 

    //Add it to the database. 
    [PlaceObj addPlace]; 

    //Add it to the coffee array. 
    [PlacesArray addObject:PlaceObj]; 
} 

- (void) addPlace { 


    NSLog(@"addplace called"); 
    if(addStmt == nil) 
    { 
     NSLog(@"inside addstmt"); 
     const char *sql = "INSERT INTO places_table (PlaceName, PlaceAddress) Values (?,?)"; 
     if(sqlite3_prepare_v2(database, sql, -1, &addStmt, NULL) != SQLITE_OK) 
     { 
      NSLog(@"error inside if loop"); 
      NSAssert1(0, @"Error while creating add statement. '%s'", sqlite3_errmsg(database)); 

     } 
    } 

    NSLog(@"outside if Loop") ; 

    sqlite3_bind_text(addStmt, 1, [PlaceName UTF8String], -1, SQLITE_TRANSIENT); 
    sqlite3_bind_text(addStmt, 2, [PlaceAddress UTF8String], -1, SQLITE_TRANSIENT); 

    if(SQLITE_DONE != sqlite3_step(addStmt)) 
    { 
     NSAssert1(0, @"Error while inserting data. '%s'", sqlite3_errmsg(database));; 
    } 
    // NSAssert1(0, @"Error while inserting data. '%s'", sqlite3_errmsg(database)); 
    else 
    { 
     //SQLite provides a method to get the last primary key inserted by using sqlite3_last_insert_rowid 
     PlaceID = sqlite3_last_insert_rowid(database); 
     NSLog(@"sqlite3_last_insert_rowid") ; 
    } 

    //Reset the add statement. 
    sqlite3_reset(addStmt); 
} 
+1

你打电话给reloaddata? – James

回答

1

您可以通过以下方式做到这一点。添加对象后,只需调用ReloadData UITableView方法,它将重新加载表。所以没有必要再次重启应用程序。

static sqlite3 *addStmt = nil; 

    - (void) add_Place:(Place *)PlaceObj { 

     NSLog(@"Super add called"); 

     //Add it to the database. 
     [PlaceObj addPlace]; 

     //Add it to the coffee array. 
     [PlacesArray addObject:PlaceObj]; 
     [TableView ReloadData]; 
    } 

    - (void) addPlace { 


     NSLog(@"addplace called"); 
     if(addStmt == nil) 
     { 
      NSLog(@"inside addstmt"); 
      const char *sql = "INSERT INTO places_table (PlaceName, PlaceAddress) Values (?,?)"; 
      if(sqlite3_prepare_v2(database, sql, -1, &addStmt, NULL) != SQLITE_OK) 
      { 
       NSLog(@"error inside if loop"); 
       NSAssert1(0, @"Error while creating add statement. '%s'", sqlite3_errmsg(database)); 

      } 
     } 

     NSLog(@"outside if Loop") ; 

     sqlite3_bind_text(addStmt, 1, [PlaceName UTF8String], -1, SQLITE_TRANSIENT); 
     sqlite3_bind_text(addStmt, 2, [PlaceAddress UTF8String], -1, SQLITE_TRANSIENT); 

     if(SQLITE_DONE != sqlite3_step(addStmt)) 
     { 
      NSAssert1(0, @"Error while inserting data. '%s'", sqlite3_errmsg(database));; 
     } 
     // NSAssert1(0, @"Error while inserting data. '%s'", sqlite3_errmsg(database)); 
     else 
     { 
      //SQLite provides a method to get the last primary key inserted by using sqlite3_last_insert_rowid 
      PlaceID = sqlite3_last_insert_rowid(database); 
      NSLog(@"sqlite3_last_insert_rowid") ; 
     } 

     //Reset the add statement. 
     sqlite3_reset(addStmt); 
    } 

干杯

+0

非常感谢你Srinivas。我在“viewWillAppear”方法中添加了[self.tableView reloadData],我的代码运行良好。当我在你提到的地方声明[self.tableView reloadData]时,出现了编译错误。但那是我的错,因为我没有给出关于所有功能定义在哪里以及从哪里被调用的全部信息。但我阅读了“reloadData”方法并找到了答案。非常感谢您的指导 – amol

0

我想你在找什么是insertRowsAtIndexPaths:withRowAnimation。这将添加具有您选择的平滑动画的行。这只有在您的UITableViewDataSource编码正确时才有效。

+0

感谢您的回复jin。 [self.tableView reloadData]对我来说工作得很好 – amol