Передача URL в Three20 TTURLMap

Я пытаюсь передать URL-адрес в качестве параметра TTURLMap следующим образом:

[map from@"tt://person/(initWithURL:)" toViewController: [PersonViewController class]];

Затем у меня есть TTStyledTableItemCell со ссылками, которые отображаются следующим образом:

<a href="tt://person/http://persons.url.com/blah">Person name</a>

но когда я нажимаю на эти ссылки, ссылка не вызывает метод initWithURL: в классе PersonViewConroller. Я проверил, что все подключено правильно, передав простую строку. Я считаю, что это не работает, потому что синтаксический анализатор считает, что URL-адрес является частью сопоставления URL-адресов TTURLMap. Есть ли способ избежать URL-адреса фида человека (это служба отдыха, которую мне нужно использовать для получения информации)?

Спасибо заранее.


person Ben    schedule 27.09.2010    source источник


Ответы (2)


Я думаю, что единственный символ, на котором спотыкается TTURLMap, — это символ /, поэтому следующее помогло мне. Просто вызывайте их, как предлагает Майк, при входе и выходе из вашей функции инициализации.

+ (NSString *)encodeTtUrl:(NSString *)str {
    NSMutableString *temp = [NSMutableString stringWithString:str];
    [temp replaceOccurrencesOfString:@"/" withString:@"__" options:NSLiteralSearch range:NSMakeRange(0, [temp length])];
    return [NSString stringWithString:temp];
}

+ (NSString *)decodeTtUrl:(NSString *)str {
    NSMutableString *temp = [NSMutableString stringWithString:str];
    [temp replaceOccurrencesOfString:@"__" withString:@"/" options:NSLiteralSearch range:NSMakeRange(0, [temp length])];
    return [NSString stringWithString:temp];
}
person Andrew Flynn    schedule 11.03.2011

Это распространенная проблема. Я не нашел элегантного решения; лучшее, что мне удалось найти, - это вручную экранировать URL-адрес на пути (например, с помощью кодировки Base64), а затем вручную отключать его внутри вашей функции initWithURL:. (На самом деле, вы, вероятно, захотите иметь функцию с именем initWithBase64EncodedURL: или что-то в этом роде, для ясности.)

person Mike Morearty    schedule 29.09.2010