2011-11-28 4 views
0

OK, 어떤 이유로 멍청한 오류가 발생합니다. 내 로그에서NSMutableArray에 값을 추가하는 중

-(void) getAllRowsFromTableNamed: (NSString *) tableName { 

    NSString *qsql = @"SELECT supplier from products"; 
    sqlite3_stmt *statement; 
    if (sqlite3_prepare_v2(db, [qsql UTF8String], -1, &statement, nil) == 
     SQLITE_OK) { 
     while (sqlite3_step(statement) == SQLITE_ROW) { 
      char *field1 = (char *) sqlite3_column_text(statement,0); 
      NSMutableString *field1Str = [[NSMutableString alloc] initWithUTF8String: field1]; 
      listofsuppliers = [NSMutableArray arrayWithObjects:field1Str, nil]; 
      NSLog(@"list of suppliers %@",listofsuppliers); 
      [field1Str release]; 
     } 
     sqlite3_finalize(statement); 
    } 
} 

나는 다음 받고 있어요 :

QueensWayInventory[13192:f803] list of suppliers ("(null)") 
QueensWayInventory[13192:f803] list of suppliers ("(null)") 
QueensWayInventory[13192:f803] list of suppliers (Dell) 
QueensWayInventory[13192:f803] list of suppliers (Apple) 
QueensWayInventory[13192:f803] list of suppliers (Apple) 
QueensWayInventory[13192:f803] list of suppliers (Dell) 

나는이 대신 원하는 :

QueensWayInventory[13192:f803] list of suppliers (
    Dell, 
    Apple 
) 

그것은 내가 잘못 매우 간단 뭔가해야합니다. 정적 목록을 만들 때 데이터베이스에서 동적 읽기를 만들려고 할 때 내가 원하는 방식으로 가져오고 싶습니다.

답변

1
  1. 당신은 당신의 NSMutableArray외부 while 루프를 작성해야합니다. while 반복문을 반복 할 때마다 다시 만들고, 콘솔에 출력하면 항상 하나의 값만 갖게됩니다. -appendObject:을 사용하여 루프 내의 각 후속 문자열 값을 추가하십시오.

  2. 필드 1 utf8 문자열을 사용하여 NSMutableString을 작성한 다음 배열에 추가하는 것은 중요하지 않지만 일반적으로 변경할 수없는 NSString을 만드는 것이 좋습니다. 해당 문자열의 내용을 조작하려는 경우 NSMutableString을 사용하십시오.

3

이 줄 :

listofsuppliers = [NSMutableArray arrayWithObjects:field1Str, nil]; 

이 문제입니다.

이전 배열을 버리고 단일 요소로 새 배열을 만듭니다.

대신, 루프 전에 당신이 원하는 : 각 요소의 단일 복사본을 포함 할 이후

listofsuppliers = [[NSMutableSet alloc] init]; 

내가 배열 대신 설정을 사용했습니다. 루프 내부에 그런

:

[listofsuppliers addObject:field1Str]; 

또한 여기에서 변경 가능한 문자열을 만들 수있는 실제 필요가 없습니다 있습니다.

+0

감사합니다. 많이 사용합니다. nsmutablearray를 사용했습니다. 문제는 지적대로였다. jus는 그것을 루프 바깥에 놓아야 만했습니다. 고마워요 (Y) – user984373

관련 문제