Добавление значений в мой NSMutableArray - PullRequest
0 голосов
/ 28 ноября 2011

ОК, по какой-то причине я получаю глупую ошибку.

-(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
)

Это должно быть что-то очень простое, я делаю неправильно. Когда я создаю статический список, я получаю его так, как я хочу, но не при попытке создать динамическое чтение из базы данных.

Ответы [ 2 ]

3 голосов
/ 28 ноября 2011

Эта строка:

listofsuppliers = [NSMutableArray arrayWithObjects:field1Str, nil]; 

это ваша проблема.

Он отбрасывает старый массив и создает новый с одним элементом.

Вместо этого перед циклом вы хотите:

listofsuppliers = [[NSMutableSet alloc] init];

Я использовал Set вместо Array, поскольку вы хотите включить только одну копию каждого элемента.

Тогда внутри вашего цикла:

[listofsuppliers addObject:field1Str];

Также обратите внимание, что здесь нет необходимости создавать изменяемую строку.

1 голос
/ 28 ноября 2011
  1. Вам необходимо создать NSMutableArray вне цикла while. Вы воссоздаете его на каждой итерации цикла while, и когда вы выводите его на консоль, оно всегда будет иметь только одно значение. Используйте -appendObject:, чтобы добавить каждое последующее строковое значение в цикле.

  2. Хотя нет ничего критического в создании NSMutableString со строкой field1 utf8 для последующего добавления в ваш массив, обычно лучше создать неизменяемый NSString. Используйте NSMutableString, если вы планируете манипулировать содержимым этой строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...