2012-04-24 67 views
0

這是我的設置。我有一個叫做radiostations的對象,其中有幾個字符串,如呼號,聲明頻率和名爲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

你的命名是一團糟; 'radiostations'應該是'RadioStations','amStationClass'應該是'amStation'(它不是一個類,它是一個實例),'amStationInfo'應該是'amStationsArray','cityField'應該是'city'或者'cityName'等......另外,如果你不使用ARC,你也會泄漏兩個字符串。 – bbum 2012-04-24 19:29:16

+0

感謝您的提示,我很新,我剛剛意識到這一點。不過,我正在使用ARC。 – StarvingPilot 2012-04-24 19:34:02

+0

無後顧之憂; Objective-C,iOS,Cocoa以及它們之間的所有框架都建立在大量常見模式上。如果你學習這些模式並遵循它們,它會使事情變得簡單得多! – bbum 2012-04-24 19:56:23

回答

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];,否則必須避免泄漏的對象。

+0

我正在使用ARC,因此我不發佈amStationClass – StarvingPilot 2012-04-24 19:26:33

+0

它現在的工作,事實證明,我需要在while語句內部分配*記錄,而不是在外面,並且在設置字符串後將對象添加到數組中...謝謝! – StarvingPilot 2012-04-24 19:28:15

1

你在哪裏分配/ init你的mutablearray? 類似:

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

你需要一次分配它,之前在它

+0

我忘了分配它,儘管我做了,但它仍然沒有填充 – StarvingPilot 2012-04-24 19:22:44

+0

我承認我很快就讀了你的問題,當我注意到這個錯誤,但可能其他人在...... Sven的回答呢? – meronix 2012-04-24 19:27:01

+0

斯文的答案奏效。我改變了兩件事,我在while循環中分配了實例,並在設置字符串後將其添加到數組中。 – StarvingPilot 2012-04-24 19:36:06