Objective c 将值追加到我的NSMutableArray

Objective c 将值追加到我的NSMutableArray,objective-c,nsmutablearray,Objective C,Nsmutablearray,好吧,不知什么原因,我犯了个愚蠢的错误 -(void) getAllRowsFromTableNamed: (NSString *) tableName { NSString *qsql = @"SELECT supplier from products"; sqlite3_stmt *statement; if (sqlite3_prepare_v2( db, [qsql UTF8String], -1, &statement, nil) ==

好吧,不知什么原因,我犯了个愚蠢的错误

-(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
)
我做错了一定很简单。当我创建一个静态列表时,我得到了我想要的结果,但当我试图从数据库中创建一个动态读取时却没有得到

  • 您需要在while循环外部创建
    NSMutableArray
    。在while循环的每次迭代中都会重新创建它,当您将它打印到控制台时,它将始终只有一个值。使用
    -appendObject:
    在循环中添加每个后续字符串值

  • 虽然使用field1 utf8字符串创建一个
    NSMutableString
    ,然后将其添加到数组中,但通常最好创建一个不可变的
    NSString
    。如果您计划操作该字符串的内容,请使用
    NSMutableString

  • 您需要在while循环外部创建
    NSMutableArray
    。在while循环的每次迭代中都会重新创建它,当您将它打印到控制台时,它将始终只有一个值。使用
    -appendObject:
    在循环中添加每个后续字符串值

  • 虽然使用field1 utf8字符串创建一个
    NSMutableString
    ,然后将其添加到数组中,但通常最好创建一个不可变的
    NSString
    。如果您计划操作该字符串的内容,请使用
    NSMutableString

  • 这一行:

    listofsuppliers = [NSMutableArray arrayWithObjects:field1Str, nil]; 
    
    这是你的问题

    它丢弃了旧的数组,并用单个元素创建了一个新数组

    相反,在循环之前,您需要:

    listofsuppliers = [[NSMutableSet alloc] init];
    
    我使用了集合而不是数组,因为您只想包含每个元素的一个副本

    然后在循环中:

    [listofsuppliers addObject:field1Str];
    
    还请注意,此处不需要创建可变字符串。

    此行:

    listofsuppliers = [NSMutableArray arrayWithObjects:field1Str, nil]; 
    
    这是你的问题

    它丢弃了旧的数组,并用单个元素创建了一个新数组

    相反,在循环之前,您需要:

    listofsuppliers = [[NSMutableSet alloc] init];
    
    我使用了集合而不是数组,因为您只想包含每个元素的一个副本

    然后在循环中:

    [listofsuppliers addObject:field1Str];
    

    还请注意,这里不需要创建可变字符串。

    好的,非常感谢,我使用nsmutablearray获得了它。问题正如你所说的那样。我必须把它放在循环之外,它起作用了。非常感谢好的非常感谢,我用nsmutablearray得到了它。问题正如你所说的那样。我必须把它放在循环之外,它起作用了。非常感谢