这是我的设置。我有一个叫做radiostations的对象,我有几个字符串,如callign,频率声明和一个名为amStationInfo的NSMutableArray。在我的viewcontroller上,我访问了一个SQLite数据库,它填充了一个数组,就像这样......
radiostations.h
@interface radiostations : NSObject {
NSString *format;
NSString *city;
}
@property (nonatomic, retain) NSString *format;
@property (nonatomic, retain) NSString *city;
ViewController.m
radiostations *amStationClass = [[radiostations alloc] init];
NSMutableArray* amStationInfo = [[NSMutableArray alloc] init];
while (sqlite3_step(statement) == SQLITE_ROW)
{
NSString *cityField = [[NSString alloc] initWithUTF8String:
(const char *) sqlite3_column_text(statement, 10)];
NSString *formatField = [[NSString alloc] initWithUTF8String:
(const char *) sqlite3_column_text(statement, 0)];
[amStationInfo addObject:amStationClass];
[amStationClass setCity:cityField];
[amStationClass setFormat:formatField];
}
[tabView reloadData];
sqlite3_finalize(statement);
然后我填充UITableView
NSString *cityValue = [(radiostations *)[amStationInfo objectAtIndex:indexPath.row] city];
NSString *formatValue = [(radiostations *)[amStationInfo objectAtIndex:indexPath.row] format];
cityLabel.text = cityValue;
formatLabel.text = formatValue;
最初我正在处理几个阵列,这很好用。然后我改变它,以便我只使用类对象处理一个数组,现在它不起作用。我知道SQLite查询和什么不起作用所以我没有任何问题。似乎数组没有填充。
答案 0 :(得分:2)
您正在更改同一radiostations
对象的属性,并将其一遍又一遍地添加到数组中。您需要为sqlite数据库中的每一行创建一个新的radiostations
对象,并添加:
while (...) {
// fetch data as before
radiostations *record = [[radiostations alloc] init];
[record setCity: cityField];
[record setFormat: formatField];
[amStationInfo addObject: record];
[record release];
}
如果您使用ARC,则需要删除行[record release];
,否则必须避免泄漏这些对象。
答案 1 :(得分:1)
你在哪里分配/初始化你的mutablearray? 类似的东西:
NSMutableArray* amStationInfo = [[NSMutableArray alloc] init];
你需要先分配一次,然后才能在其中添加对象