我有两个视图控制器说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];
}
}
试试这个可能会对你有所帮助。