2

我正在使用修改后的基于视图的应用程序,在其中我启动了 UIViewController 显示输入控件和 TTThumbsViewController 显示结果。我在 AppDelegate 中使用 TTNavigator 将它们传递给initWithName: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];
}

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

4

2 回答 2

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:方法。

于 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 回答