значение int изменилось на ноль после popViewController - PullRequest
0 голосов
/ 19 марта 2012

У меня есть два контроллера вида: A & B

В A.h я делаю

{
    int cId;
    bool selected;
}

@property (readwrite) int cId;

В A.m я делаю

@synthesize cId;

- (void) viewWillAppear : (BOOL) animated
{
   //It will only call if its popBacked
   if(selected==YES) //I set it to YES some where in my A.m and its push to : B
   {
      selected=NO;
      NSLog(@"%d",cId); //getting 0 (zero)
   }
}

В Б. я делаю

#import "A.h"

- (void) sentBack : (int) cIdValue
{
    A *obj=[A alloc] init];
    obj.cId=cIdValue;
    NSLog(@"%d",obj.cId); //Its print properly
   [self.navigationController popViewControllerAnimated:YES];
}

Моя проблема в том, что когда я возвращаюсь назад, его значение изменяется и устанавливается на 0 (ноль). Поэтому я не могу получить доступ к своему правильному идентификатору Почему это изменения? Что я делаю не так? Любая помощь, предложение полезно. Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 19 марта 2012

Почему это меняется? Поскольку значение в cId по-прежнему равно нулю.

Что я делаю не так?

Вы создаетедругой экземпляр для класса A и присвоение значения его атрибуту (cId).

В вашем случае экземпляр класса A (скажем, A1), из которого вы выдвинули класс B, совершенно отличается и не имеет никакого отношения к экземпляру класса A (например, A2), который вы создали в методе sentBack.Поэтому присвоение значения в A2 не будет отражаться в A1.

Итак, что вам нужно сделать?

- (void) sentBack : (int) cIdValue {
   if([self.navigationController.viewControllers count]> 0) {                
               A *obj =[self.navigationController.viewControllers objectAtIndex:
                             [self.navigationController.viewControllers count]-1];
              obj.cId=cIdValue;
              [self.navigationController popViewControllerAnimated:YES];
          }
}

Здесь вы получаете доступ к A1 (экземпляр класса A, откудавы вытолкнули сам класс B) из стека навигации, поэтому теперь A2 (A *obj) указывает на исходный A1.Теперь присвойте cId со значением int и поп-буквой B, и вы получите новое значение, присвоенное cId.

0 голосов
/ 19 марта 2012

// Отредактировал ваш код Bm

#import "A.h"

- (void) sentBack : (int) cIdValue {
   if([[self.navigationController viewControllers] count]>0) {                
               A *AViewCont=[[self.navigationController viewControllers] objectAtIndex:0];
              AViewCont.cId=cIdValue;
              [self.navigationController popViewControllerAnimated:YES];
          }
}

Попробуйте, этот может помочь вам.

...