我正在使用修改后的基于视图的应用程序,我已经启动了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
方法永远不会被调用。知道为什么会这样吗?
答案 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]