如何使用TTNavigator推送下一个视图?

时间:2011-07-09 09:35:25

标签: objective-c uiviewcontroller three20 ttnavigator ttthumbsviewcontroller

我正在使用修改后的基于视图的应用程序,我已经启动了UIViewController,显示了一个输入控件& TTThumbsViewController显示结果。我正在使用TTNavigator initWithName:在AppDelegate中为TTThumbsViewController传递它们。 我自己从文档中读到了这个:

我的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];
}

此代码的结果是输入使用initWithName:通过TTThumbsViewController中的AppDelegate传递,但是永远不会被推入&我的ViewDidLoad方法永远不会被调用。知道为什么会这样吗?

2 个答案:

答案 0 :(得分:2)

每当我遇到这样的错误时,初始化程序(在你的情况下是initWithName :)返回nil。这是我要检查的第一件事。如果这不能解决,请尝试在[TTBaseNavigator presentController:parentURLPath:withPattern:action:]中设置断点。

如果未达到该方法,则您的URL-Map出现问题。例如,您可能需要对用户输入进行urlencode。基于URL的导航适用于URL。无法在URL中使用的字符串无法以未编码的方式传递。

如果达到该方法,您可以使用调试器并从那里逐步执行代码以找出错误。

我想提一下的另一件事是,当您想要使用导航器时,您真的不需要使用[[UIApplication sharedApplication] delegate]引用您的appDelegate。这是导航仪如此有用的原因之一。尝试将呼叫更改为:

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

然后你可以摆脱toGallery:方法。

答案 1 :(得分:0)

在我的代码中,我没有:

navigator.window = self.window;

并实例化窗口调用:

navigator =[TTNavigator navigator];
navigator.window;

并将[self.window makeKeyAndVisible]更改为

 [navigator.window makeKeyAndVisible]