three20 - 添加到openURLAction的查询是否也可以传递回父级

时间:2010-03-03 09:30:00

标签: url-routing three20

我正在设置路由到TTTableViewController,如下所示:

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

然后,在另一个视图控制器中,我设置了一个可变字典作为我的查询传递:

// 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;

in .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吗?

1 个答案:

答案 0 :(得分:0)

我遇到了类似的问题。我怀疑我们可能需要传入一个委托(通过该查询),以及您的字典作为单独的对象。然后让父母尊重在这个新VC中定义的协议,其中您现在可以在适当的时间传回该字典。

TTNavigator还有viewControllerForURL:query :(以及其他)用于在不打开VC的情况下获取VC,但是传递查询并让VC“做正确的事”就足够了,而且我认为 - 强调思考 - 想法是开始使用URL Actions而不仅仅是URL(在Three20意义上)。