Как продвинуть следующий вид с TTNavigator? - PullRequest
2 голосов
/ 09 июля 2011

Я использую модифицированное приложение на основе вида, в котором у меня запускается 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:, но никогда не вставляется в метод & my ViewDidLoadникогда не звонят.Есть идеи, почему это так?

Ответы [ 2 ]

2 голосов
/ 09 июля 2011

Всякий раз, когда у меня возникала такая ошибка, это был инициализатор (в вашем случае 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:.

0 голосов
/ 09 июля 2011

В моем коде у меня нет:

navigator.window = self.window;

и создайте экземпляр окна, вызвав:

navigator =[TTNavigator navigator];
navigator.window;

, а также изменить [self.window makeKeyAndVisible] на

 [navigator.window makeKeyAndVisible]
...