2011-08-25 4 views
0

UITableView에 표시 할 수있는 SQL 데이터베이스가 있습니다. 그러나 개체를 추가하려고하면 UITableView에서 업데이트되지 않습니다. 응용 프로그램을 다시 시작한 후에 만 ​​업데이트됩니다. UITableView에서 객체를 삭제하면 inbuilt 메소드가 삭제되는데 은 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

답변 주셔서 감사합니다 진. [self.tableView reloadData] 나를 위해 완벽하게 작동 – amol

관련 문제