2011-08-25 3 views
0

J'ai une base de données SQL que je peux afficher sur un UITableView. Mais si vous essayez d'ajouter un objet, il n'est pas mis à jour dans UITableView. Il est mis à jour uniquement après le redémarrage de l'application. Lorsque je supprime des objets de UITableView il y a une méthode intégrée qui fait la suppression est if (editingStyle == UITableViewCellEditingStyleDelete) Y a-t-il des méthodes pour ajouter des objets aussi?objet ajouté non mis à jour dans UITableView en utilisant la base de données SQlite

Mes méthodes d'addition sont les suivantes:

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

appelez-vous reloaddata? – James

Répondre

1

Vous pouvez le faire de la manière suivante. Après avoir ajouté l'objet appelez simplement la méthode UITableView ReloadData et il rechargera la table à nouveau. Il n'est donc pas nécessaire de redémarrer l'application à nouveau.

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); 
    } 

Vive

+0

Merci beaucoup Srinivas. J'ai ajouté [self.tableView reloadData] sur la méthode "viewWillAppear" que le code I fonctionnait correctement. Quand j'ai déclaré [self.tableView reloadData] à l'endroit que vous avez mentionné, il y avait une erreur de compilation. Mais c'est ma faute car je n'ai pas donné d'informations complètes sur où sont définies toutes les fonctions et d'où elles sont appelées. Mais j'ai lu à propos de la méthode "reloadData" et trouvé la réponse. Merci beaucoup pour vos conseils – amol

0

Je pense que ce que vous recherchez est l'insertRowsAtIndexPaths:withRowAnimation. Cela va ajouter les lignes avec une animation lisse de votre choix. Cela ne fonctionnera que si votre UITableViewDataSource est codé correctement cependant.

+0

Merci pour votre réponse jin. [self.tableView reloadData] a parfaitement fonctionné pour moi – amol

Questions connexes