three20 - может ли запрос, добавленный к openURLAction, также быть передан обратно родителю - PullRequest
2 голосов
/ 03 марта 2010

Я настраиваю маршрутизацию к 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;

в .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 голосов
/ 28 апреля 2010

Я сталкиваюсь с подобной проблемой. Я подозреваю, что нам может понадобиться передать делегата (через этот запрос) вместе с вашим словарем в качестве отдельного объекта. Затем попросите родителя соблюдать протокол, определенный в этом новом VC, в котором вы теперь можете вернуть этот словарь в нужное время.

TTNavigator также имеет viewControllerForURL: query: (среди прочего) для получения VC без его открытия, но, возможно, достаточно передать запрос и заставить VC "делать правильные вещи", плюс я думаю - акцент на думать - Идея состоит в том, чтобы начать использовать действия URL, а не только URL (в смысле Three20).

...