0

私は iTunesU でスタンフォード CS193P コースを受講していますが、課題 4 の最近見た写真の部分をどのように行うかについて少し戸惑っています。

この課題では、2 つのタブを持つタブ バー コントローラーを使用します。1 番目のタブは場所の表を表示するナビゲーション コントローラーで、写真名の表をプッシュし、写真付きのスクロール ビューをプッシュします 2 番目のタブは、最近閲覧した写真の表を表示するナビゲーション コントローラーです。写真付きのスクロール ビューをプッシュします。

最初のタブが機能していて、スクロールビューを画像で押すと、その写真を最近の写真の配列に追加したいのですが、どの MVC がこの最近の写真の配列を所有する必要がありますか?

  1. タブ ビュー コントローラー (このクラスはサブクラス化を意図していないとドキュメントに記載されている場合)

  2. 2番目のタブのルートTable View Controller(現在の写真をインスタンスに渡す方法は別のタブにあります)(率直に言って、最初のタブが2番目のタブについて知っている必要があります)

  3. 最初のタブのルート テーブル ビュー コントローラー (では、2 番目のタブは最初のタブからこのデータをどのように取得するのでしょうか?)

  4. 他の何か

私は、MVC、プロトコル、デリゲート、およびデータ ソースについてまだ漠然としていると思います。このタスクの解決策をお持ちでしたら、私が調べていただけると幸いです。

ユーザーのデフォルトからデータをプッシュおよびプルすることになりました。タブバーコントローラーがサブクラス化を意図していない理由は気になりますが。複数のタブでデータが必要な場合、データを所有する最も論理的な場所のように思えます。

4

3 に答える 3

1

さらに多くの検索を行った後、タブからタブにデータを渡すための一貫した方法が見つかりませんでした。

比較的少量のデータしか格納していないため、(便宜上) データをユーザーのデフォルトにプッシュおよびプルするためのクラス メソッドを使用して、クラスを作成することにしました。

于 2012-03-10T06:13:55.993 に答える
1

私は似たようなことをしましたが、あなたの質問を完全に誤解していなければ、ある種の共有データベースのように機能する Singelton を作成できます。初めて使用するときに作成されるだけで、通常の方法で初期化されることはありません。このシングルトンには配列を含めることができ、次のように書くだけでどこからでも呼び出すことができます。

[SingeltonType main].sharedPhotos

次の例は、アプリの所有者である「ユーザー」がいる自分のコードからのものです。そこに、実行時にどこからでも利用できる情報を含むデータベースを保存します。

ヘッダ:

@interface User : NSObject {
Database *_storage;
}

@property (nonatomic, retain) Database *storage;

+(User*)owner;

メインファイル:

#import "User.h"

@implementation User

@synthesize password = storage = _storage;

static User* _owner = nil;

+(User*)owner {
    @synchronized([User class]) {
        if(!_owner) [[self alloc] init];

        return _owner;
    }
    return nil;
}

+(id)alloc {
    @synchronized([User class]) {
        NSAssert(_owner == nil, @"Attempted to allocate a second instance of a singleton.");
        _owner = [super alloc];

        return _owner;
    }
    return nil;
}

-(id)init {
    self = [super init];

    if(self != nil) {
        self.storage = [[[Database alloc] init] autorelease];
    }
    return self;
}

次に、次のように呼び出します。

[User owner].storage // which gives me access to it 

それが役立つことを願っています! さまざまな場所からデータにアクセスする必要がある場合、本当に便利です:)

注: このオブジェクトのインスタンスは 1 つだけで、それ以上作成することはできません。

于 2012-03-09T05:35:37.700 に答える
0

プロトコルを使用して、その質問を少しいじりました。画像 (および UIScrollView) を表示するクラスでプロトコルを作成しました。次に、「表示された写真」の tableController クラスでプロトコルを採用し、表示された画像を渡すプロトコル メソッドを実装しました。私が抱えている問題は、1) まだロードされておらず、写真を表示するまでロードされない可能性があることを考えると、「表示された写真」tableController クラスをデリゲートとして定義する方法です。 controllers と tab controller を使用して、プロトコルを宣言するクラスを指します。プログラミング方法論から、プロトコルまたはクラス メソッドのどちらが正しい方法であるかについて、専門家の意見を聞きたいですか?

ありがとうKB

于 2012-07-05T05:18:56.807 に答える