2

次のように TTTableViewController へのルーティングを設定しています。

[map from:@"myurl://filter/(initWithName:)" 
      toViewController:[FilterViewController class]];

次に、別のView Controllerで、変更可能な辞書を設定して、クエリとして渡します。

// Set up dictionary and populate a field
NSMutableDictionary *filterDictionary;
filterDictionary = [[NSMutableDictionary alloc] init];
[filterDictionary setObject:@"test entry" forKey:@"test key"];

// Attach a query to the URL and open it
TTURLAction *theAction = [[TTURLAction actionWithURLPath:@"myurl://filter/search"] 
          applyQuery:filterDictionary];
[[TTNavigator navigator] openURLAction:theAction];

最後に、フィルター ビュー コントローラーで、値に正しくアクセスできます。

.h:

@property (nonatomic, retain) NSMutableDictionary *filterDictionary;

.m:

- (id)initWithName:(NSString *)filterName query:(NSMutableDictionary *)filters {
 if (self = [self init]) {
  self.filterDictionary = filters;
  NSLog(@"Filter Dictionary assigned : %@", self.filterDictionary);
 }
 return self;
}

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
 if (filterDictionary) 
        [filterDictionary setObject:textField.text forKey:@"searchAddress"];
 [textField resignFirstResponder];
 return YES;
}

辞書は正しく変更可能で、問題なく値などを追加できます。ただし、私の filterViewController が閉じられると、変更された辞書が親に反映されると想定しました-参照によって正しく渡されました。

何か不足していますか?filterVC 内の私の辞書は、Three20 の基本クラスが原因で、実際にはコピーですか?

4

1 に答える 1

0

私は同様の問題に遭遇しています。デリゲートを (そのクエリを介して) 辞書と共に別のオブジェクトとして渡す必要があるのではないかと思います。次に、この新しい VC で定義されたプロトコルを親が尊重するようにします。これで、適切なタイミングでその辞書を返すことができます。

TTNavigator には、VC を開かずに取得するための viewControllerForURL:query: (とりわけ) もありますが、おそらくクエリを渡して VC に「正しいことを実行させる」だけで十分です。 URL だけでなく、URL アクションの使用を開始します (Three20 の意味で)。

于 2010-04-27T22:33:42.640 に答える