基本上我映射我的控制器以接受要传递到列表页面控制器的地址类。这是在这里完成的:
[map from:@"tt://listingPage/(initWithResult:)" toViewController:[ListingPageController class]];
[map from:[Address class] name:@"result" toURL:@"tt://listingPage/(initWithResult:)"];
此url正在我的表项中使用,该表项正在数据源中填充:
for (Address *result in [(id<SearchResultsModel>)self.model results]) {
NSString* url = [result URLValueWithName:@"result"];
TTTableImageItem* tii = [TTTableMessageItem itemWithTitle:[result addressText]
caption:[result addressText]
text:[result subText]
imageURL:[result image]
URL:url];
[self.items addObject:tii];
}
我的应用程序崩溃,我不知道为什么,似乎得到一个无效的视图。任何帮助将非常感激。
答案 0 :(得分:0)
Three20 URL Based Navigation Guide
[map from:[Address class] name:@"result" toURL:@"tt://listingPage/(initWithResult:)"];
您遇到的问题是您的代码正在尝试调用(initWithResult:)
实例上的方法[Address class]
。
您需要做的是从Result
实例中检索Address
参数,并使用它来形成您的网址。
示例:
@interface ListingPageController : UIViewController
- (id)initWithResult:(NSNumber *)resultId;
@end
@interface Address : NSObject
@property (nonatomic, copy) NSNumber *resultId;
@end
因此,在这种情况下,您需要将resultId
从Address
传递到initWithResult:
上的ListPageController
来电。
[map from:[Address class] name:@"result" toURL:@"tt://listingPage/(resultId)"];
[map from:@"tt://listingPage/(initWithResult:)" toViewController:[ListingPageController class]];
请注意(resultId)
中有无冒号 - 因为这是一个属性getter方法调用。
以下示例:
Address *result = [[[Address alloc] init] autorelease];
result.resultId = [NSNumber numberWithInt:12345];
NSString* url = [result URLValueWithName:@"result"];
[[TTNavigator navigator] openURLAction:[TTURLAction actionWithURLPath:url]];
首先将result
转换为网址tt://listingPage/12345
,然后打开该网址,然后再拨打ListingPageController initWithResult:12345
。