我有3个班级A班,班级B班,班级C.
我将变量从ClassB传递到ClassA,然后弹出ClassB(View Controller)
// ClassB.m
ClassA *obj = [[ClassA alloc]init];
[obj passValue:value];
[obj release];
[self.navigationController popViewControllerAnimated:YES]; //It will pop and show ClassC View Controller.
// ClassA.h
NSString* storeValue;
-(void)passValue:(NSString*)getValue;
// ClassA.m
-(void)passValue:(NSString*)getValue
{
NSLog(@"Value is %@",getValue); // I am Getting Value Here
storeValue = getValue;
}
在ClassC中。我正在推动ClassA View Controller
ClassC.m
ClassA *objA = [[ClassA alloc]init];
[self.navigationController pushViewController:objA animated:YES];
[objA release];
现在在A级。内部视图Didload。我试图打印storeValue。但它返回null。我在这里做错了什么。任何人都可以指导我以正确的方式使用示例代码。
我尝试使用property来访问变量。但它返回空值。
谢谢, 阿尼什
答案 0 :(得分:2)
我考虑过以下课程等级 - C - > A - >乙 您不需要为A类创建任何对象,因为它已经在导航堆栈上。使用 -
NSMutableArray *activeControllerArray = [self.navigationController.viewControllers mutableCopy];
for(int i = 0, i <[activeControllerArray count], i++) {
if([[activeControllerArray objectAtIndex:i] isKindOfClass:[ClassA class]) {
//Set Property and instance variable here
ClassA *obj = [activeControllerArray objectAtIndex:i];
obj.someVariable = somevalue; //you can use in any way that you want
break;
}
}
//Pop to previous view now
答案 1 :(得分:1)
您实际上是在引用ClassA的多个实例。在ClassB中,您可以创建一个新的ClassA对象并设置一个值。
在classC中,您将创建一个不同的ClassA实例,然后检查上一个实例的值集。
如果声明为static,则可以在所有实例中访问'storeValue'中设置的值。
其他实例变量属于类的实例,并且由每个实例管理seperatley。
我认为你这次完全错了。
答案 2 :(得分:0)
在弹出C类时改变你的课程:
ClassC *obj = [[ClassC alloc]init];
[obj passValue:value];
[self.navigationController popViewControllerAnimated:YES];
[obj release];
答案 3 :(得分:0)
正如@JS Rodrigues所说,你没有指向ClassA的存在实例,你只是在创建另一个ClassA实例。
要获取ClassA的现有实例,您可以在navigationcontroller的堆栈上进行控制(此代码类似于@rishi代码,但使用快速枚举):
for (UIViewController *obj in self.navigationController.viewControllers) {
if ([obj isKindOfClass:[ClassA class]]) {
ClassA *ca=(ClassA *)obj;
[ca passValue:value];
}
}
答案 4 :(得分:0)
不要在viewDidLoad中打印值
viewDidLoad在分配之后和传递变量之前触发,因此,你的变量返回NULL
如果确实需要通过这种方式,请在标题中设置变量,然后使用传递方法
例如:
你想将字符串myString从A传递给B,然后转到B并打印字符串
在A上,导入B然后执行以下功能
self.bViewController = [[BVIEWCONTROLLER alloc]init];
[self.bViewController setmyString:myString];
//if u're running OS lower than 5.0, include this
[self.bViewController viewDidAppear];
之后,在b视图控制器中打印myString变量,在viewDidAppear方法中输入。
祝你好运