Как продвинуть следующий вид с TTNavigator?
Я использую модифицированное приложение на основе вида, в котором у меня запускается UIViewController, показывающий элемент управления вводом, и TTThumbsViewController, показывающий результаты. Я передаю их в AppDelegate, используя TTNavigator initWithName:
для TTThumbsViewController. Я сделал это сам, читая из документации:
Метод ViewDidLoad внутри моего TTThumbsViewController:
- (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];
}
Результатом этого кода является то, что ввод передается через мой AppDelegate в TTThumbsViewController с помощью initWithName:
но никогда не толкнул & мой ViewDidLoad
метод никогда не вызывается. Есть идеи, почему это так?
2 ответа
Всякий раз, когда у меня возникала такая ошибка, это был инициализатор (в вашем случае initWithName:), возвращавший ноль. Это первое, что я бы проверил. Если это не помогло, попробуйте установить точку останова в [TTBaseNavigator presentController:parentURLPath:withPattern:action:]
,
Если этот метод не достигнут, значит что-то не так с вашей URL-картой. Например, вам может понадобиться ввести код пользователя. Навигация на основе URL работает с URL. Строки, которые нельзя использовать в URL, не могут быть переданы без кодирования.
Если этот метод достигнут, вы можете использовать отладчик и пройтись по коду, чтобы выяснить, что не так.
Еще одна вещь, которую я хотел бы упомянуть, это то, что вам действительно не нужно ссылаться на ваш appDelegate с [[UIApplication sharedApplication] delegate]
когда вы любите пользоваться навигатором. Это одна из причин, почему навигатор так полезен. Попробуйте изменить вызов на:
-(IBAction)search:(id)sender
{
NSString *str = [[NSString alloc] initWithFormat:@"app://album/%@",txtSearch.text];
TTOpenURLFromView(str, self.view);
TTOpenURL(str); // Three20 < 1.0.3
}
Вы можете избавиться от toGallery:
метод.
В моем коде у меня нет:
navigator.window = self.window;
и создать экземпляр окна вызова:
navigator =[TTNavigator navigator];
navigator.window;
а также изменить [self.window makeKeyAndVisible]
в
[navigator.window makeKeyAndVisible]