视图中的Setter视图b:发送到实例的无法识别的选择器

时间:2012-09-28 09:21:10

标签: iphone ios ipad

以下是一些代码:

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是否正常?

4 个答案:

答案 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。