2

私は、入力コントロールを表示する UIViewController と結果を表示する TTThumbsViewController を開始した、変更されたビューベースのアプリケーションを使用しています。TTThumbsViewController の TTNavigator を使用して、AppDelegate でそれらを渡してinitWithName:います。ドキュメントを読んで自分でこれを行いました:

TTThumbsViewController 内の ViewDidLoad メソッド:

- (void)viewDidLoad {  
self.photoSource = [[PhotoSource alloc]  
                    initWithType:PhotoSourceNormal  
                    title:myTitle
                    photos:myImages  
                    photos2:nil  
                    ];  
} 

私の AppDelegate の実装:

@implementation geoFlickrAppDelegate
@synthesize window=_window;
@synthesize viewController=_viewController;
@synthesize navigator;
- (BOOL)application:(UIApplication *)application              didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
 navigator =[TTNavigator navigator];
 navigator.window = self.window;

 TTURLMap *map = navigator.URLMap;
 [map from:@"app://home/" toViewController:[geoFlickrViewController class]];
 [map from:@"app://album/(initWithName:)" toViewController:[AlbumController class]];

 [navigator openURLAction:[TTURLAction actionWithURLPath:@"app://home/"]];
 // Override point for customization after application launch.
 [self.window makeKeyAndVisible]; 
 return YES;
}

-(void)toGallery:(NSString*)txt
{
 [navigator openURLAction:[TTURLAction actionWithURLPath:txt]];
}

次のビューをプッシュするための UIViewController 内のイベント:

-(IBAction)search:(id)sender 
{
    NSString *str = [[NSString alloc] initWithFormat:@"app://album/%@",txtSearch.text];
    geoFlickrAppDelegate *appDelegate = (geoFlickrAppDelegate *)[[UIApplication sharedApplication] delegate];
    [appDelegate toGallery:str];
}

このコードの結果は、入力が TTThumbsViewController を使用して AppDelegate を介して渡されますinitWithName:が、プッシュされることはなく、ViewDidLoadメソッドが呼び出されることはありません。なぜそうなのか、何か考えはありますか?

4

2 に答える 2

2

このようなエラーが発生したときはいつでも、初期化子(この場合はinitWithName:)がnilを返していました。これが私が最初にチェックすることです。それでも解決しない場合は、にブレークポイントを設定してみてください[TTBaseNavigator presentController:parentURLPath:withPattern:action:]

その方法に到達しない場合は、URLマップに問題があります。たとえば、ユーザー入力をurlencodeする必要がある場合があります。URLベースのナビゲーションはURLで機能します。URLで使用できない文字列は、エンコードせずに渡すことはできません。

そのメソッドに到達した場合は、デバッガーを使用してそこからコードをステップ実行し、何が問題なのかを見つけることができます。

[[UIApplication sharedApplication] delegate]もう1つ言及したいのは、ナビゲーターを使用するときに、appDelegateを参照する必要がないということです。これが、ナビゲーターが非常に便利な理由の1つです。呼び出しを次のように変更してみてください。

-(IBAction)search:(id)sender 
{
    NSString *str = [[NSString alloc] initWithFormat:@"app://album/%@",txtSearch.text];
    TTOpenURLFromView(str, self.view);
    TTOpenURL(str); // Three20 < 1.0.3
}

toGallery:その後、メソッドを取り除くことができます。

于 2011-07-09T18:32:04.697 に答える
0

私のコードにはありません:

navigator.window = self.window;

ウィンドウ呼び出しをインスタンス化します。

navigator =[TTNavigator navigator];
navigator.window;

また[self.window makeKeyAndVisible]

 [navigator.window makeKeyAndVisible]
于 2011-07-09T09:53:11.713 に答える