2012-03-19 46 views
0

後我有兩個視點控制器說一個 & int值變爲零popViewController

在啊,我做

{ 
    int cId; 
    bool selected; 
} 

@property (readwrite) int cId; 

在上午我做

@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(零)。所以我無法訪問我的正確密碼。爲什麼是變化?我做錯了什麼?任何幫助,建議是有幫助的。 在此先感謝。

回答

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

感謝您的回答,當我嘗試了您的更改後,它顯示了一個錯誤,例如,類型爲UIViewController **的對象上未找到**屬性cId。 – Hemang 2012-03-19 11:59:00

+0

Hemang,現在嘗試上面的代碼將明確地解決您的問題。我已經編輯了一點代碼。 – Kuldeep 2012-03-19 12:02:39

+0

感謝它的工作! :)你能告訴我,爲什麼我在上面的代碼中錯了(在我的問題中)!這將有所幫助。 – Hemang 2012-03-19 12:08:56

1

爲什麼是變化?因爲cId中的值仍然爲零。

我在做什麼錯了?

您正在爲A類創建一個不同的實例並將其值賦予其屬性(cId)。

就你的情況而言,類B的實例(讓我們說A1)完全不同,並且與您在sentBack方法中創建的A類實例(可以說A2)沒有任何關係。因此在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

感謝回答:) – Hemang 2012-03-19 12:25:16

+0

快樂編碼;) – Krrish 2012-03-19 12:29:07