我有两个视图控制器说 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。为什么会有变化?我做错了什么?任何帮助,建议都很有帮助。 提前致谢。
答案 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];
}
}
试试这个可以帮到你。