Совместно использовать переменную bool / NSNUmber между двумя контроллерами представления - PullRequest
1 голос
/ 03 октября 2011

У меня есть два контроллера представления, и я хочу разделить переменную bool между ними.Поэтому я создаю переменную bool с @propery (nonatomic, assign) с обеих сторон и с одной стороны написал

newVC.myBool1 = self.myBool2;

На другом контроллере представления я могу прочитать значение переданной переменной bool,но мне нужно изменить его на втором контроллере представления, чтобы я мог прочитать значение на первом контроллере представления.Итак, я знаю, что это невозможно, потому что `bool * это примитивный тип.

Итак, я использовал NSNumber, но это также не работает.На контроллере первого вида я установил viewDidLoad

self.myBool1 = [NSNumber numberWithBool:NO];

На контроллере второго вида:

self.myBool2 = [NSNumber numberWithBool:YES];

Но на контроллере первого вида значение 0 - НЕТ ...Таким образом, создается впечатление, что создание нового NSNumber не передается первому контроллеру представления.

Что я могу сделать, чтобы решить эту проблему?С уважением Тим

Ответы [ 2 ]

0 голосов
/ 03 октября 2011

У вас есть много вариантов, но то, что вы должны использовать, зависит от того, нужно ли обоим viewControllers уведомлять об изменении значения.

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

Если вам нужно уведомление об изменении в каждом viewController, возможно, самый чистый дизайн - написать метод set в одном viewController, который устанавливает значение как в самом себе, так и в другом viewController. Что-то вроде:

-(void) setMyBool:(BOOL)newValue
{
  myBool = newValue;
  otherViewController.myBool = newValue;
}

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

-(void) setMyBool:(BOOL)newValue
{
  if ( self.busyFlag == YES )
     return;
  self.busyFlag = YES;
  myBool = newValue;
  otherViewController.myBool = newValue;
  self.busyFlag = NO;
}

Еще один вариант - использовать NSNotifications, чтобы изменить значение и заставить каждый класс viewController прослушивать уведомление об изменении. И предложение TheEye о написании класса-обертки и сохранении ссылки на экземпляр этого класса в обоих viewControllers тоже будет работать.

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

0 голосов
/ 03 октября 2011

Объект NSNumber является неизменным, поэтому его нельзя использовать таким образом.Если вы пишете [NSNumber initWithxxx], фактически вы создаете новый объект.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...