0

我有两个视图控制器说A & B

在啊我在做

{
    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)完全不同,并且与您在 sendBack 方法中创建的 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一个int值并弹出 B,您将获得分配给的新值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 回答