Как продвинуть следующий вид с 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]
Другие вопросы по тегам