2012-04-24 16 views
0

ここに私の設定です。私は呼び出しステートメントのようないくつかの文字列、宣言された頻度、およびamStationInfoと呼ばれるNSMutableArrayを持つradiostationsというオブジェクトを持っています。私のViewControllerで、私はそう...アレイに問題があります

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

を移入SQLiteのデータベースにアクセスします
NSString *cityValue = [(radiostations *)[amStationInfo objectAtIndex:indexPath.row] city]; 
NSString *formatValue = [(radiostations *)[amStationInfo objectAtIndex:indexPath.row] format]; 
cityLabel.text = cityValue; 
formatLabel.text = formatValue; 

最初はいくつかの配列を扱っていましたが、これはうまくいきました。クラスオブジェクトを使って1つの配列しか扱わないように変更しましたが、今は動作しません。私はSQLiteのクエリを知っていると私はそれに何の問題もないので、動作しません。あたかも配列に値が入っていないかのようです。

+0

あなたの名前は混乱しています。 'radioStations'は' RadioStations'、 'amStationClass'は' amStation'でなければなりません(クラスではなく、インスタンスです)、 'amStationInfo'はおそらく' amStationsArray'、 'cityField'は' city'でなければなりません。 'cityName'など...また、ARCを使用していない場合は、2つの文字列も漏れています。 – bbum

+0

チップをありがとう、私は全く新しいです、そして、私はそれを実現しました。私はARCを使用しています。 – StarvingPilot

+0

心配ありません。 Objective-C、iOS、Cocoa、およびその間のすべてのフレームワークは、非常に多くの共通パターンで構築されています。あなたがそれらのパターンを学んでそれに従うなら、それは事をずっと簡単にするでしょう! – bbum

答えて

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

+0

今は動作しますが、while文の中に*レコードを割り当てて外部には必要なく、文字列を設定した後にオブジェクトを配列に追加する必要がありました...ありがとう! – StarvingPilot

1

mutable配列をどこに割り当てるか/ initしましたか? 何かのように:

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

あなたはそれ

+0

私はそれを割り当てるのを忘れていましたが、私がしたとしても、それでもまだ人が住んでいません – StarvingPilot

+0

私はあなたの質問を急いで読んだことを告白します。 – meronix

+0

Svenの答えが働いた。私は2つのことを変更し、whileループ内でインスタンスを割り当て、文字列を設定した後に配列に追加しました。 – StarvingPilot