Форум программистов, компьютерный форум CyberForum.ru

Обмен свойствами двух UIViewController посредством KVO - Objective-C

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Objective-C Как при дозагрузке данных показать UIActivityIndicatorView внизу UITableView? http://www.cyberforum.ru/objective-c/thread1277378.html
Есть UITableViewController, в tableView: willDisplayCell: forRowAtIndexPath: если это последняя строка таблицы я в фоновом потоке вызываю загрузку следующих элементов данных, когда данные загружены обновляю таблицу ; Вопрос в том, как мне показать внизу страницы индикатор загрузки следующих строк таблицы (вращающийся кружочек и надпись "загрузка"). Как его сделать отдельно я знаю (UIView с...
Objective-C Не понимаю делегирование Доброго времени суток всем! Изучаю objC недолго, имею небольшой опыт в Си/Си++ Объясните мне, пожалуйста, зачем нужны делегаты? Все что находил в интернете - не понимал. Принцип их работы я вроде как понимаю, как и протоколов вцелом, но вот их предназначение мне неясно. http://www.cyberforum.ru/objective-c/thread1276588.html
Построение интерфейса (литература) Objective-C
Здравствуйте! Никак не могу найти информацию по нужной мне теме. Недели две изучал Objective-C, изучал его после 2 лет работы с C++. Синтаксис более менее разобрал, но начать писать программы не могу, так как нет информации по работе с интерфейсом. В сети куча статей и книг на тему прогаммирования под ios, а у меня желание писать под mac os. Может разница не большая, но все же появляются...
Двойной указатель Objective-C
Все привет! В процессе работы возникла у меня необходимость проверить одну фичу, для чего надо было по-быстрому накатать тестовый метод условного вида: - (void)addSomeValueToDict:(NSDictionary *)dict { NSMutableDictionary *mutableCopy = ; ; dict = mutableCopy; }
Objective-C Свойства класса http://www.cyberforum.ru/objective-c/thread1273946.html
Здравствуйте! Пытаюсь разобраться со старым и новым способами записи свойств класса. Нашел здесь ссылку http://www.cyberforum.ru/objective-c/thread1094903.html , но не все понял. Вот класс со свойством(Написал по аналогии с C++) @interface Person : NSObject { @protected NSInteger _a;
Objective-C Как сделать принятие классом протокола только при определенных условиях? Доброго, всем, времени суток. В iOS 8 был "деприкейтед" UIAlertView. Вместо него теперь UIAlertController, которы не требует предварительного принятия протокола UIAlertViewDelegate. Но, чтобы сделать поддержку iOS7 и ниже, этот протокол должен быть в случае если systemVersion] < 8. В связи с этим появился вопрос: как добавить принятие этого протокола только под старые версии iOS? Я подозреваю... подробнее

Показать сообщение отдельно
Melzas
38 / 38 / 4
Регистрация: 20.07.2011
Сообщений: 88
19.10.2014, 14:51     Обмен свойствами двух UIViewController посредством KVO
Смотря что нужно достичь.

Цитата Сообщение от residentkms Посмотреть сообщение
использовать отдельный хедер, в нём обьявить переменную, и её использовать
Нет, глобальные переменные - это плохо.

Если нужно следить за изменениями, то, как я уже писал, правильный подход - это передача модели между контроллерами. Если не нужно, то можно обойтись передачей самого number.

Рецепт:
1. Создать класс модели:
Objective-C
1
2
3
4
@interface NumberModel : NSObject
@property (nonatomic, strong) NSNumber *number;
 
@end
2. В первом контроллере создать свойство для NumberModel:
Objective-C
1
2
3
4
@interface FirstViewController : UIViewController
@property (nonatomic, strong) NumberModel *numberModel;
 
@end
3. В первом контроллере инициализировать модель, установить number и наблюдать за его изменениями:
Objective-C
1
2
3
4
5
6
7
-(void)viewDidLoad {
    [super viewDidLoad];
 
    NumberModel *numberModel = [NumberModel new];
    numberModel.number = @(42);
    [self addObserver:self forKeyPath:@"numberModel.number" options:NSKeyValueObservingOptionNew context:nil];
}
4. Во втором контроллере создать свойство для NumberModel и передавать туда ссылку на модель из первого
Objective-C
1
2
3
4
@interface SecondViewController : UIViewController
@property (nonatomic, strong) NumberModel *numberModel;
 
@end
Objective-C
1
2
3
4
5
6
-(IBAction)onAction:(id)sender {
    SecondViewController *secondViewController = [SecondViewController new];
    secondViewController.numberModel = self.numberModel;
 
    [self.navigationController pushViewController:secondViewController animated:YES];
}
5. Теперь если второй контроллер изменит содержимое numberModel.number, то первый получит уведомление и сможет обновить свой вид/сделать что-то еще.

То есть, модель передается по цепочке и в любом контроллере может измениться. Если это происходит, то остальные контроллеры получают уведомление и могут отреагировать.

P.S. код набран на ходу, могут быть неточности.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru