popViewController之后,int值更改为零



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

在A.h中,我正在进行

{
    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(零)。所以我无法访问正确的密码。为什么是变化?我做错了什么?任何帮助,建议都是有用的。提前感谢

为什么会发生变化因为cId中的值仍然为零。

我做错了什么

您正在为类a创建一个不同的实例,并将值分配给其属性(cId)。

在您的案例中,您推送B类的A类实例(比如A1)完全不同,与您在sentBack方法中创建的A类实例没有关系。因此,在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 B的Class A实例)本身,因此现在A2(A *obj)指向原始A1。现在为cId分配一个int值,然后弹出B,您将获得分配给cId的新值。

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

试试这个可能会对你有所帮助。

相关内容

  • 没有找到相关文章

最新更新