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
)
我做错了一定很简单。当我创建一个静态列表时,我得到了我想要的结果,但当我试图从数据库中创建一个动态读取时却没有得到
NSMutableArray
。在while循环的每次迭代中都会重新创建它,当您将它打印到控制台时,它将始终只有一个值。使用-appendObject:
在循环中添加每个后续字符串值NSMutableString
,然后将其添加到数组中,但通常最好创建一个不可变的NSString
。如果您计划操作该字符串的内容,请使用NSMutableString
NSMutableArray
。在while循环的每次迭代中都会重新创建它,当您将它打印到控制台时,它将始终只有一个值。使用-appendObject:
在循环中添加每个后续字符串值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得到了它。问题正如你所说的那样。我必须把它放在循环之外,它起作用了。非常感谢