2012-03-19 3 views
0

Я два вида контроллеров говорят & BINT значения изменяется на ноль после popViewController

В Ah я делаю

{ 
    int cId; 
    bool selected; 
} 

@property (readwrite) int cId; 

В Am Я делаю

@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) 
    } 
} 

В B.m я делаю

#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 (ноль). Поэтому я не могу получить доступ к моему правильному cId. Почему это изменения? Что я делаю неправильно? Любая помощь, предложение полезно. Заранее спасибо.

ответ

0

// Под ред свой код B.m

#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]; 
      } 
} 

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

+0

спасибо за ответ, Когда я попробовал свои изменения, он покажет мне ошибку, например ** Свойство cId не найдено на объекте типа UIViewController **. – Hemang

+0

Hemang, Попробуйте приведенный выше код теперь определенно решит вашу проблему. Я немного изменил код. – Kuldeep

+0

благодарит свою работу! :) Не могли бы вы рассказать мне, почему я ошибался в своем вышеприведенном коде (в моем вопросе) !! Это будет полезно. – Hemang

1

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

Что я делаю неправильно?

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

В вашем случае экземпляр класса A (скажем, A1), из которого вы нажали класс B, полностью отличается и не имеет никакого отношения к экземпляру класса A (позволяет сказать A2), который вы создали в методе sendBack. Поэтому присвоение значения в 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 (Class A Instance, где вы толкнул класс B) себя от навигации стека, так что теперь A2 (A *obj) указывает на оригинальный A1. Теперь присвойте cId значение int и поп B вы получите новое значение, присвоенное cId.

+0

спасибо за ответ :) – Hemang

+0

счастливое кодирование;) – Krrish