TTNavigator не правильно открывает TTURLMap при передаче параметров - PullRequest
0 голосов
/ 04 декабря 2010

Я пытаюсь передать параметры через Three20 для iOS способом, подобным этому вопросу: Многопараметрическое сопоставление с Three20 и TTURLMap

Однако я сталкиваюсь свыпуск этот вопрос не решает.В настоящее время мое сопоставление настроено как

    [map from:@"sb://launcher/(initWithAccount:)" toModalViewController:[AccountOverviewViewController class] transition:0];

. Чтобы попасть туда, я звоню:

    NSString *URL = [NSString stringWithFormat:@"sb://launcher/%@", [@"hey" stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding]];
[[TTNavigator navigator] openURLAction:[[TTURLAction actionWithURLPath:URL] applyAnimated:YES]];

Затем в AccountOverviewViewController у меня есть

- (void)initWithAccount:(NSString *)name {
NSLog(name);

}

, чтобы убедиться, что я получаю правильное значение (которым я являюсь), поскольку Console.app выводит «эй».Все, что работает нормально, за исключением одной вещи, AccountOverviewViewController никогда не появляется!Вызывается метод initWithAccount: внутри него, но он никогда не отображается на экране.Я пропустил здесь шаг, чтобы заставить контроллер получить параметр И показать себя?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 28 ноября 2011

Это прекрасно работает:

NSString *strTTURL = [NSString stringWithFormat:@"tt://PhotoDetail/%@",photoID];
TTURLAction *urlAction=[[[TTURLAction alloc] initWithURLPath:strTTURL] autorelease];
urlAction.animated=YES;
[[TTNavigator navigator]openURLAction:urlAction];
0 голосов
/ 08 декабря 2010

Ваш initWithAccount:(NSString*)name метод неверен. Он должен читать - (id)initWithAccount:(NSString*)name и возвращать себя. TTNavigator использует это возвращаемое значение (это потомок UIViewController) и передает его в контроллер навигации. Поскольку вы ничего не возвращаете, это просто удача, что приложение не падает, а просто ничего не отображает.

Шаблон для любого метода, который начинается с init в Cocoa Touch:

- (id) initWithSomething:(id)something {
    if (self = [<designated initializer>]) {
        //Do something here.
    }
    return self;
}

Первая строка зависит от того, из какого класса вы производите подклассы. Вы всегда хотели бы вызвать обозначенный инициализатор . Итак, если вы подклассифицируете UIViewController или TTViewController, если бы было [self initWithNibName:nil bundle:nil].

...