0

私は2つのビューコントローラーがABと言っています

ああで私はやっています

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

Bmで私はやっています

#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にアクセスできません。なぜそれが変化なのか?私が間違っていることは何ですか?どんな助けでも、提案も役に立ちます。 前もって感謝します。

4

2 に答える 2

1

なぜそれが変化なのか?cIdの値はまだゼロであるためです。

私が間違っていることは何ですか?

クラスAに別のインスタンスを作成し、その属性(cId)に値を割り当てています。

あなたの場合、クラスBをプッシュした場所からのクラスAインスタンス(たとえば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(クラスBをプッシュした場所からのクラスAインスタンス)自体にアクセスしているため、A2(A *obj)は元のA1を指しています。次にcId、値を割り当ててintBをポップすると、に割り当てられた新しい値が取得されcIdます。

于 2012-03-19T12:12:48.917 に答える
0

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

これを試してみてください。

于 2012-03-19T11:49:49.647 に答える