2012-04-29 3 views
0

나는 새 것이며 아직 몇 가지 의문점이 있습니다. 데이터베이스 테이블에서 배열로 데이터를로드하는 클래스를 만들었습니다. 이제 TableView에서 삭제를 선택하여 데이터베이스에서 레코드 삭제를 구현하고 싶습니다. 나는 곤경에 처해있다.TableView에서 항목 ID를 식별하고 데이터베이스를 삭제하는 방법

데이터베이스의 inTableView에서 항목에 대한 설명을 표시하는 데 문제가 있습니다. _id 필드는 표시되지만 "필드 이름"은 표시되지 않습니다.

마치 개체가 배열에있는 것처럼 보입니다.

다른 문제는 데이터베이스를 삭제하는 방법입니다.

- (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; 
} 
+0

* GetCategories * 방법 내부에서 제대로 NSLogs 인쇄를 수행

//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]; } 
lawicko

답변

0

는 다음을 시도해보십시오? BTW 메소드 이름에 낙타의 대문자를 사용하고 대문자로만 클래스 이름을 시작하는 것이 좋습니다.
관련 문제