popViewController后int值变为零

时间:2012-03-19 11:21:58

标签: iphone popviewcontrolleranimated

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

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

在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。为什么会有变化?我做错了什么?任何帮助,建议都很有帮助。 提前致谢。

2 个答案:

答案 0 :(得分: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分配int值并弹出B,您将获得分配给cId的新值。

答案 1 :(得分: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];
          }
}

试试这个可以帮到你。