Просмотр контроллера, теряющего значения свойств после инициализации — Xcode

#ios #objective-c #properties #viewcontroller

#iOS #objective-c #свойства #viewcontroller

Вопрос:

Мой контроллер просмотра теряет свои свойства после вызова. Итак, BaseTransitionController имеет (присваивает) значение int, которое изменяется по мере перемещения пользователей по приложению. Я хочу получить это значение int в другом контроллере представления, поэтому я инициализирую его в этом (ViewController B). Self.indexSelectedLogin является свойством ViewController B. Но оба RootController.indexSelected и self.indexSelectedLogin оказываются имеющими значение 0, когда они должны иметь значение 1-5. Спасибо

 @interface BaseTransitionController : UIViewController
@property (assign) int indexSelected;
------------------------------------------------------------------
View Controller B
BaseTransitionController *rootController = [[BaseTransitionController alloc] init];
self.indexSelectedLogin = rootController.indexSelected;
  

Комментарии:

1. Вероятно, это потому, что вы создаете совершенно новый BaseTransitionController вместо ссылки на существующий экземпляр.

2. @rmaddy Что вы подразумеваете под существующим экземпляром? Я использовал BaseTransitionController, поэтому я могу наследовать от него несколько классов и получать те же свойства, что и UIViewController, плюс свойство indexSelected.

3. Вам нужно получить доступ к indexSelected некоторым существующим BaseTransitionController , правильно? Тот, у которого уже есть некоторое значение для его indexSelected свойства. В крошечном фрагменте кода, который вы показываете в своем вопросе, вы создаете новое BaseTransitionController и получаете его свойство unset indexSelected .

Ответ №1:

Для этого вы должны сохранить старое значение int и передать в новую переменную int, как показано ниже:-

 @interface BaseTransitionController : UIViewController
@property (assign) int indexSelected;

//Assuming here indexSelected =5;
------------------------------------------------------------------
View Controller B
@property (nonatomic,strong) BaseTransitionController *rootController
//Now in this before alloc init just check the instance of BaseTransitionController 

//if instance exist then you will get the retain value
self.indexSelectedLogin = self.rootController.indexSelected;

if(!self.rootController)
{
self.rootController = [[BaseTransitionController alloc] init];
 }
  

Таким образом, вы можете сохранить значение и соответствующим образом установить его в своем классе.