2011-01-15 8 views
1

この問題は、説明が非常に困難であるように思えるので、私は最善を尽くします。TTNavigationデータを渡す

私はいくつかのユーザープロファイルを持っています。私は彼らにすべて同じクラスで扱われることを望みます。

TT://User/1 
TT://User/2 

私はそれをどのようにマップして、それらが両方ともユーザークラスにプッシュされたのでしょうか。

これに加えて、どのようにユーザークラスにどのユーザーIDをプルするように指示できますか。

答えて

3

まず、URLをコントローラにマップする必要があります。ビューを表示するURLを呼び出す前にURLマップを設定する必要があるため、通常AppDelegateでこれを行います。

  • TTURLMap
  • 経由でコントローラへのURLの地図常にワイルドカードURLのつまりで始まる
  • TTNavigator
  • をインスタンス化します。 * TTWebController(Webブラウザビューコントローラ)のようなデフォルトのView Controllerにマップする
  • 基本的には、1)URLなし、2)URLなしの2種類のURLがあります。前者の場合、URLが呼び出されると、マップされたビューコントローラのinitWithNibName:bundle: "コンストラクタ"が呼び出されます。後者の場合、TTURLMapで呼び出す "init"メソッドを指定できます。以下の例を参照してください。
  • 実際には、openURLAction:メソッドを使用してURLを開きます。

ここにコードがあります。

@implementation AppDelegate 

- (void)applicationDidFinishLaunching:(UIApplication *)application { 
    TTNavigator* navigator = [TTNavigator navigator]; 

    TTURLMap* map = navigator.URLMap; 

    // This is the default map. * = wildcard, any URL not registered will be 
    // routed to the TTWebController object at runtime. 
    [map from:@"*" toViewController:[TTWebController class]]; 
    [map from:@"tt://catalog" toViewController:[CatalogController class]]; 
    [map from:@"tt://user/(initWithId:)" 
toViewController:[MyUserViewController class]]; 
    [map from:@"tt://user/(initWithId:)" 
toViewController:[MyUserViewController class]]; 

    if (![navigator restoreViewControllers]) { 
    [navigator openURLAction:[TTURLAction actionWithURLPath:@"tt://catalog"]];  
    } 
} 

// ... 

@end 

第二に、TTViewController

@implementation MyUserViewController 

- (id) initWithId:(NSNumber *)index { 
    if (self = [super initWithNibName:nibName bundle:nil]) { 
    // Do your initialization here. 

    // Get the index from a singleton data manager containing the "model." 
    } 

    return self; 
} 

@end 

第三に、どこにもアプリ内からURLにナビゲートをサブクラス化。

// Navigate to the URL. 
[[TTNavigator navigator] openURLAction:[TTURLAction actionWithURLPath:@"tt://user/1"]];