1

私は最初の iPhone アプリケーションを作成しています。これはワイン チャート アプリケーションです。xcode 4.2のストーリーボード付きです。情報、ワイン チャート、検索、お気に入りの 4 つのタブを備えたタブ バーに基づいています。現在、ワインチャートを作成しています。このタブでは、TableView にプロトタイプセルを配置しました。このセルにワインの名前、地区、画像を入力したいと考えています。これまでのところ、私はこれを行ってきました:

1: 2 番目のタブをナビゲーション コントローラーにリンクしました

2: ナビゲーション コントローラーを TableView (WinesViewController) にリンクしました

3: WinesViewController.h/.m クラスを作成

4: 識別子: wineCell のプロトタイプ セルと、テキスト: 名前と地区のタイトルとサブタイトル ラベルを追加しました。

5:ボトルの画像をまとめたフォルダを作る WineName.png

6: ワインごとに 1 つの辞書を持つ Wine.plist、辞書キー = ワイン名の plist を作成しました。辞書には、「名前」、「地区」、「画像」、「酸度」などのキーを持つ 19 個の文字列が含まれています。

これはplistです:

http://www.flickr.com/photos/80427098@N07/7372450200/in/photostream

ここまでで、テーブルビューのセル ラベルに plist の文字列を入力し、セクションでアルファベット順に並べ替えたいと思います。私はこれに慣れていないので、どのコードを使用し、どこに置くべきかわかりません。plistからの情報をテーブルビューに入力する方法をもっと理解するのを手伝ってくれる人はいますか?

WinesViewController.h/.m にコードを直接入れるべきではないと言われました。そこで、NSObject のサブクラス (WineObject.h/.m と呼びましょう) を作成し、ここに NSDictionary / NSEnumerator コードをいくつか入れて、何らかの方法でこれを WinesViewController プロトタイプ セルにリンクできると言われました。しかし、私は本当に方法がわかりません!私はまだそこまで経験がありません!誰かがコード、それらを配置する場所、およびすべてをリンクする方法について助けてくれることを本当に願っています. それは素晴らしいことです。X-Code と Objective C のコーディングを少し理解できるようになりました (ようやく!) が、これはまだ高度な作業であり、行き詰まっている今、いくつかの助けがあれば、多くの作業を行うことができます! 役立つチュートリアル、サンプル プロジェクトなどへの指示も大歓迎です。

私の質問に答えるために、他に知っておくべきことがあれば教えてください。WinesViewController または WineObject にコードを 1 行も書いていないので、全体の説明が本当に必要です..

後で、同じ plist からの情報を DetailViewController (ワインに関する情報を含むフルスクリーン ビュー) で使用します。これが、テーブルビュー セルで 3 つの値しか使用していないときに、plist に非常に多くの文字列がある理由です。この plist のデータに対して検索機能も実行されます。すべての有用な助けに感謝します!

4

1 に答える 1

1

Objective-C でモデル ビュー コントローラーパラダイムを使用する方法について読むことから始める必要があります。これにより、データをそのデータのビューから分離する方法が説明されます。それを理解すると、残りの部分をよりよく理解できるようになります。

plist ファイルに 1 つの変更を加えることをお勧めします。各ワイン名がキーであり、各キーの値がワインに関する情報を含む辞書である辞書をトップ レベルにするのではなく、トップ レベルを辞書の配列にします。各ワインは配列内の 1 つの要素であり、現在持っているすべての情報とワインの名前を含む辞書になります。これは、データ モデルがどのように見えるかにより密接に対応します。このようなもの:

<array>
    <dict>
        <key>Name</key>
        <string>J. P. Chenet Merlot</string>
        <key>Image</key>
        <string>JPChenet.png</string>
        ... the rest of the keys and values for this wine ...
    </dict>

    <dict>
        <key>Name</key>
        <string>Campo Viejo Crianza</string>
        ... the rest of the keys ...
    </dict>
</array>

各ワイン オブジェクトには、ディクショナリ内の各要素のインスタンス変数が含まれます。(つまり、画像用、名前用、地区用など)次のようなもの:

@class WineObject : NSObject { 
    NSString* name;
    NSString* imagePath;
    NSString* district;
    // ... etc.
};

あなたのモデルは単に の である可能性がNSArrayありWineObjectsます。他の質問で述べた方法を使用して、plist からオブジェクトを読み取ることができます。次のようになります。

NSMutableArray* wineModel = [[NSMutableArray alloc] init];
NSArray* wines = [NSArray arrayWithContentsOfURL:<url of the plist file>];
NSEnumerator* wineEnum = [wine objectEnumerator];
NSDictionary* nextWine = nil;
while ((nextWine = [wineEnum nextObject]) != nil)
{
    // Get the wine data from the dictionary
    WineObject* newWine = [WineObject wineWithDictionary:nextWine];

    // Add the next wine to our model
    [wineModel addObject:newWine];
}

WineObjectクラスには、次のようなクラス初期化子があります。

+ (id)wineWithDictionary:(NSDictionary*)wineDict
{
    name = [wineDict objectForKey:@"Name"];
    district = [wineDict objectForKey:@"District"];
    imagePath = [wineDict objectForKey:@"Image"];
    // ... extract the rest of the values from the dictionary ...
}
于 2012-06-16T04:54:40.140 に答える