1

基本的に、リストページコントローラーに渡されるアドレスクラスを受け入れるようにコントローラーをマップします。ここで行われます:

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

アプリがクラッシュします。理由はわかりませんが、無効なビューを取得しているようです。どんな助けでも大歓迎です。

4

1 に答える 1

0

Three20 URL ベースのナビゲーション ガイド

[map from:[Address class] name:@"result" toURL:@"tt://listingPage/(initWithResult:)"];

問題は、コードがインスタンスでメソッド(initWithResult:)を呼び出そうとしていることです。[Address class]

代わりに、インスタンスResultからパラメーターを取得し、それを使用して URL を形成する必要があります。Address

例:

@interface ListingPageController : UIViewController
    - (id)initWithResult:(NSNumber *)resultId;
@end

@interface Address : NSObject
    @property (nonatomic, copy) NSNumber *resultId;
@end

したがって、この場合、resultIdfromAddressinitWithResult:呼び出し onに渡しますListPageController

[map from:[Address class] name:@"result" toURL:@"tt://listingPage/(resultId)"];   
[map from:@"tt://listingPage/(initWithResult:)" toViewController:[ListingPageController class]]; 

これはプロパティ getter メソッドの呼び出しであるため、コロンが含まれていないことに注意してください。(resultId)

例に従ってください:

Address *result = [[[Address alloc] init] autorelease];
result.resultId = [NSNumber numberWithInt:12345];
NSString* url = [result URLValueWithName:@"result"];
[[TTNavigator navigator] openURLAction:[TTURLAction actionWithURLPath:url]];

resultこれはまずURLに変換され、tt://listingPage/12345次にその URL が開かれ、次に が呼び出されますListingPageController initWithResult:12345

于 2012-05-16T00:05:20.393 に答える