如何正确使用NSObject与三个20的URL

时间:2010-04-21 15:51:15

标签: objective-c iphone three20

基本上我映射我的控制器以接受要传递到列表页面控制器的地址类。这是在这里完成的:

[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];
}

我的应用程序崩溃,我不知道为什么,似乎得到一个无效的视图。任何帮助将非常感激。

1 个答案:

答案 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

因此,在这种情况下,您需要将resultIdAddress传递到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