2011-08-25 25 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