Как нажать следующий вид с помощью 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:) возвращал nil. Это первое, что я бы проверил. Если это не поможет, попробуйте установить точку останова в [TTBaseNavigator presentController:parentURLPath:withPattern:action:].

Если этот метод не достигнут, что-то не так с вашей URL-картой. Например, вам может понадобиться urlencode ввода ваших пользователей. Навигация на основе 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:.

person tonklon    schedule 09.07.2011
comment
Я удалил метод toGallery:, восстановил инициализацию, и теперь мое приложение работает без сбоев. Спасибо, tonklon. - person Kex; 10.07.2011

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

навигатор.окно = собственное.окно;

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

navigator =[TTNavigator navigator];
navigator.window;

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

 [navigator.window makeKeyAndVisible]
person sergio    schedule 09.07.2011
comment
если я удалю navigator.window = self.window;, я получу белый экран, а второе изменение на самом деле ничего не изменило.. - person Kex; 09.07.2011
comment
каково значение self.window тогда? вы используете файл nib или нет? - person sergio; 09.07.2011
comment
Я использую файл пера в моем первом представлении. Ничего не изменилось, когда я сделал ваше редактирование, я получаю белый экран. - person Kex; 09.07.2011