2012-04-29 52 views
0

我是新來的,我仍然有一些疑惑。 我創建了一個從數據庫表中將數據加載到數組中的類。現在我想通過在TableView中選擇Delete來實現從數據庫中刪除記錄。我遇到了麻煩。如何識別TableView中的項目ID並刪除數據庫

我有問題要顯示數據庫inTableView中項目的描述。字段_id顯示,但「字段名稱」不顯示。

就好像對象不存在於數組中一樣。

我遇到的另一個問題是如何刪除數據庫。

//Variáveis para coleta de dados do banco 
NSString *ID_KEY = @"_id"; 
NSString *NAME_KEY = @"name"; 
NSString *DESCRIPTION_KEY = @"description"; 

#pragma mark - Métodos Usuários 
- (NSArray *)GetCategories 
{ 
    //Cria uma instância do DataBase para poder trabalhar 
    FMDatabase *db = [Database DBWrite]; 
    //Cria um array para receber os dados do select 
    NSMutableArray *array = [[[NSMutableArray alloc] init] autorelease]; 
    //Testamos se o DataBase está aberto 
    if ([db open]){ 
     //Precisamos de um ResultSet para receber e trabalhar com o resultado do SELECT 
     FMResultSet *rs = [db executeQuery:@"SELECT _id, name, description FROM category"]; 
     //Fazemos um LOOP para carregar o array com os dados do SELECT 
     while ([rs next]) { 
      //Campo _id 
      int _idI = [rs intForColumn:@"_id"]; 
      NSNumber *fieldID = [[NSNumber alloc] initWithInt:_idI]; 

      //Campo name 
      NSString *fieldName = [rs stringForColumn:@"name"]; 


      //Campo description 
      NSString *fieldDescription = [rs stringForColumn:@"description"];    

      //Dicionário para guardar as chaves e objetos 
      NSMutableDictionary *rowDict = [[NSMutableDictionary alloc] initWithCapacity:3]; 

      //Guardamos as informações do ID e Name no Log para futura consulta em caso de erros 
      //NSLog(@"%@ - %@ - %@", fieldID, fieldName, fieldDescription);    

      //Adiciona os valores e chaves de cada linha 
      [rowDict setObject:fieldID   forKey: ID_KEY]; 
      [rowDict setObject:fieldName  forKey: NAME_KEY]; 
      [rowDict setObject:fieldDescription forKey: DESCRIPTION_KEY]; 

      NSLog(@"%@ - %@ - %@", [rowDict objectForKey:ID_KEY], [rowDict objectForKey:NAME_KEY], [rowDict objectForKey:DESCRIPTION_KEY]);    

      [array addObject:rowDict]; 

      [fieldID release]; 
      [fieldName release]; 
      [fieldDescription release]; 
      [rowDict release]; 
     } 
     [rs close]; 
     [db close]; 
    } 
    return array; 
} 



-(void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
    //Cria e inicializa a classe categoria 
    Category *categoria = [[Category alloc] init]; 
    //Verifica se o array está vazio e inicializado e cria 
    if (arrCategory != nil) 
     [arrCategory release]; 
    //Carrega os dados da categoria 

    arrCategory = [[NSMutableArray alloc] initWithArray:[categoria GetCategories]]; 
    //Inicializa tudo 

    [categoria release]; 
    [tbvCategory reloadData]; 
} 



-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

{ 

    //Cria a célula 
    UITableViewCell *celula = [tableView dequeueReusableCellWithIdentifier:@"celula"]; 
    if (celula == nil) { 
     celula = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"celula"] autorelease]; 
     //Define o estilo da célula 
     [celula setSelectionStyle:UITableViewCellSelectionStyleGray]; 
    } 

    NSDictionary *rowVals = (NSDictionary *) [arrCategory objectAtIndex:indexPath.row]; 
    //Pega o valor do campo Name 
    NSString *fieldName = (NSString *) [rowVals objectForKey:@"name"]; 

    NSLog(@"%@ - %@", [rowVals objectForKey:@"name"], fieldName); 

    //Here is ERROR 
    celula.textLabel.text = [NSString stringWithFormat:@"%@", [rowVals objectForKey:@"name"]]; 

    return celula; 
} 



- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 
{  

    Category *categoria = [[Category alloc] init]; 
    NSDictionary *dici = (NSDictionary *) [arrCategory objectAtIndex:indexPath.row]; 
    NSNumber *linha = (NSNumber *) [dici objectForKey:@"_id"]; 

    NSNumber *selRow = [[NSNumber alloc] initWithInteger: indexPath.row]; 

    [categoria DeleteCategory:selRow]; 

    [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; 

    [arrCategory removeObjectAtIndex:indexPath.row]; 
    [tableView endUpdates]; 
    [tableView reloadData];  

} 
+0

從* GetCategories *方法中做正確的NSLogs打印?順便說一句,使用駱駝大小寫方法名稱是一種很好的做法,只能用大寫字母來啓動類名稱。 – lawicko 2012-04-30 09:04:06

回答

0

嘗試以下操作:

- (NSArray *)GetCategories 
{ 
NSString* dbPath = @"Path To Database"; 
FMDatabase *db = [FMDatabase databaseWithPath:dbPath]; 

NSMutableArray *array = [[[NSMutableArray alloc] init] autorelease]; 
if (![db open]){ 
    NSLog(@"Could not open DB"); 
    return nil; 
} 
FMResultSet *rs = [db executeQuery:@"SELECT _id, name, description FROM category"]; 
while ([rs next]) 
{ 
    int _idI = [rs intForColumn:@"_id"]; 
    NSNumber *fieldID = [NSNumber numberWithInt:_idI]; 
    NSString *fieldName = [rs stringForColumn:@"name"]; 
    NSString *fieldDescription = [rs stringForColumn:@"description"];    

    NSMutableDictionary *rowDict = [[NSMutableDictionary alloc] initWithCapacity:3]; 

    //Adiciona os valores e chaves de cada linha 
    [rowDict setObject:fieldID   forKey: ID_KEY]; 
    [rowDict setObject:fieldName  forKey: NAME_KEY]; 
    [rowDict setObject:fieldDescription forKey: DESCRIPTION_KEY];   

    [array addObject:rowDict]; 
    [rowDict release]; 
} 
[rs close]; 
[db close]; 

return array; 
} 
相關問題