1

这是一些代码:

ViewControllerA.h

@interface ViewControllerA: UIViewController {
   NSString *myString;
}

@property (nonatomic,retain)NSString *myString;

视图控制器A.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]
}

为什么?错误指的是“[DMNavigationController setMyString:]”而不是我的视图控制器是否正常?

4

4 回答 4

0

您的myView变量已被分配为您的视图控制器的父视图控制器,这显然不是一个ViewA实例,因为崩溃试图向它发送由ViewA. 你为什么这样做——你想和父母一起完成什么?

于 2012-09-28T09:37:37.767 回答
0

我认为您对 ViewController 以及如何在 NavigationController 中正确处理它们有点困惑。

您可能从 an 开始DMINavigationController并使用ViewControllerA. 如果你推送一个新的 ViewController ViewControllerB,父级将不是ViewControllerANavigationController 。

如果你想访问之前的 ViewController,你需要查询viewControllersNavigationController 的属性来找到它。

您要查找的 VC 位于 (当前对象的索引)-1

int index = [self.navigationController.viewControllers indexOfObject:self] - 1;
ViewControllerA *vcA = [self.navigationController.viewControllers objectAtIndex:index];
于 2012-09-28T09:42:34.963 回答
0

而不是parentViewController我认为你的意图presentingViewController。这仅适用于 iOS5 或更高版本。

我看到您已经接受了另一个答案,这很好,但是另一种方法是让视图控制器 B 拥有一个对视图控制器 A 的弱引用的属性,A 将在创建 B 之后但在它转换到 B 之前设置该属性(例如,prepareForSegue如果您使用的是segues)。

于 2012-09-28T15:27:57.380 回答
-1

您不能将字符串设置为视图。您必须创建一个标签,然后将文本设置为标签,还有一件事您没有为 myString 创建属性,那么您是如何设置的

@synthesize myString;

如果您正在编写变量的属性,那么只有您可以添加@synthesize。

于 2012-09-28T09:25:56.820 回答