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