0

所以这是我的设置。我有一个名为 radiostations 的对象,其中有几个字符串,如呼号、声明的频率和一个名为 amStationInfo 的 NSMutableArray。在我的视图控制器上,我访问了一个 SQLite 数据库,该数据库像这样填充数组......

电台.h

@interface radiostations : NSObject {

    NSString *format;
    NSString *city;
}

@property (nonatomic, retain) NSString *format;
@property (nonatomic, retain) NSString *city;

视图控制器.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 查询以及什么不起作用,所以我对此没有任何问题。似乎数组没有被填充。

4

2 回答 2

2

您正在更改同一radiostations对象的属性并将其一遍又一遍地添加到数组中。您需要为radiostationssqlite 数据库中的每一行创建一个新对象并添加:

while (...) {
    // fetch data as before

    radiostations *record = [[radiostations alloc] init];
    [record setCity: cityField];
    [record setFormat: formatField];
    [amStationInfo addObject: record];
    [record release];
}

如果您使用 ARC,则需要删除 line [record release];,否则有必要避免泄漏这些对象。

于 2012-04-24T19:20:42.863 回答
1

你在哪里分配/初始化你的可变数组?就像是:

NSMutableArray* amStationInfo = [[NSMutableArray alloc] init];

您需要分配一次,然后才能在其中添加对象

于 2012-04-24T19:13:22.527 回答