以下是一些代码:
ViewControllerA.h
@interface ViewControllerA: UIViewController {
NSString *myString;
}
@property (nonatomic,retain)NSString *myString;
ViewControllerA.m
@implementation ViewControllerA
@synthesize myString;
然后我在导航控制器中推送ViewControllerB。当我想返回ViewControllerA时 ViewControllerB.m
-(IBAction)randomAction(id)sender {
ViewControllerA *myViewController = (ViewControllerA*)[self parentViewController]:
[myViewController setMyString:@"test"]: // HERE IS THE ERROR : "[DMINavigationController setMyString:]:unrecognized selector sent to instance"
[self.navigationController popToViewController:[[self.navigationController viewControllers] objectAtIndex:0] animated:YES]
}
为什么呢?错误引用“[DMINavigationController setMyString:]”而不是我的viewcontroller是否正常?
答案 0 :(得分:0)
您的myView
变量已被指定为您的视图控制器的父视图控制器,由于崩溃试图向其发送由ViewA
声明的消息,因此显然不是ViewA
实例。你为什么这样做 - 你想与父母一起完成什么?
答案 1 :(得分:0)
我认为你对ViewControllers有点困惑,以及如何在NavigationController中正确处理它们。
您可能从DMINavigationController
开始,并使用ViewControllerA
进行初始化。如果您推送一个新的ViewController ViewControllerB
,则父级将不是ViewControllerA
,而是NavigationController。
如果要访问以前的ViewController,则需要查询NavigationController的viewControllers
属性才能找到它。
您正在寻找的VC位于(当前对象的索引)-1
int index = [self.navigationController.viewControllers indexOfObject:self] - 1;
ViewControllerA *vcA = [self.navigationController.viewControllers objectAtIndex:index];
答案 2 :(得分:0)
而不是parentViewController
我认为你打算presentingViewController
。这仅适用于iOS5或更高版本。
我看到你已经接受了另一个答案,这很好,但是另一种方法是视图控制器B具有一个属性,该属性是视图控制器A的弱引用,A在创建B之后但在它转换为之前设置B(例如,如果您正在使用segues,则在prepareForSegue
中)。
答案 3 :(得分:-1)
您无法将字符串设置为视图。你必须创建一个标签,然后将文本设置为标签,还有一件事你没有为myString创建属性,那你怎么设置
@synthesize myString;
如果您正在编写变量属性,则只能添加@synthesize。