Я нахожу простейшую и самую элегантную версию с прохождением блоков. Давайте назовите контроллер вида, который ожидает возвращенных данных как «A» и возвращает контроллер представления как «B». В этом примере мы хотим получить 2 значения: первый из Type1 и второй из Type2.
Предполагая, что мы используем Storyboard, первый контроллер устанавливает блок обратного вызова, например, во время подготовки segue:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.destinationViewController isKindOfClass:[BViewController class]])
{
BViewController *viewController = segue.destinationViewController;
viewController.callback = ^(Type1 *value1, Type2 *value2) {
// optionally, close B
//[self.navigationController popViewControllerAnimated:YES];
// let's do some action after with returned values
action1(value1);
action2(value2);
};
}
}
и «B» должны объявить свойство обратного вызова, BViewController.h:
// it is important to use "copy"
@property (copy) void(^callback)(Type1 *value1, Type2 *value2);
Чем в файле реализации BViewController.m после того, как мы получим желаемые значения для возврата нашего обратного вызова, следует вызвать:
if (self.callback)
self.callback(value1, value2);
Следует помнить, что использование блока часто требует управления сильными и __вековыми ссылками, например здесь
Вы используете битовую маску, как указано в http://php.net/manual/en/function.json-encode.php :
json_encode($array, JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE);
Это будет добавьте двоичные значения JSON_PRETTY_PRINT
и JSON_UNESCAPED_UNICODE
с двоичным оператором OR.
Эти флаги - битмаски . Я писал об этом однажды давным-давно здесь, на SO .
Итак, в основном, чтобы использовать более одного варианта, вам нужно или их вместе
json_encode($array, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);