我有以下问题:
我使用Storyboard创建了一个iOS 5 SDK应用程序,其中包含一个TabBar和三个ViewController。
我想从另一个类(Receiver.m)访问UI标签,例如ThirdViewController.m,它是TabBar的thee ViewController之一。

在ThirdViewController.h中,我得到了

@interface ThirdViewController : UIViewController {
}
@property (weak, nonatomic) IBOutlet UILabel *textlabel1;
@end

并在ThirdViewController.h中:
@implementation ThirdViewController
@synthesize textlabel1;
...

这似乎还可以,因为我可以在ThirdViewController实例中设置标签属性。
现在,从Receiver.m中获取访问权限,我使用:
   UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:[NSBundle mainBundle]];
   ThirdViewController *myVC = [storyboard instantiateViewControllerWithIdentifier:@"ThirdViewController"];
   myVC.textlabel1.text = @"Hello";

这是行不通的。我不想创建ThirdViewController的新实例,而是访问现有实例来仅更新UILabel。默认情况下,Project Navigator中的“我的情节提要”名为MainStoryboard.storyboard。
我在获取ThirdViewController类实例时在做错什么吗?

错误提示:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason:
'Storyboard (<UIStoryboard: 0x190590>) doesn't contain a view controller with
identifier 'ThirdViewController''

谢谢!

最佳答案

情节提要无法提供访问已显示的视图控制器版本的方法-正如您所发现的那样,正在使用的方法将创建一个新实例。

如果您希望外部对象更新属于视图控制器的特定标签,我会质疑代码的结构。这不是典型的设计模式,因为它在两个对象之间形成了紧密的依赖关系。通常,您会将视图控制器设置为Receiver对象的委托(如果它是由该视图控制器创建的),否则您的接收器对象会发送第三个视图控制器正在监听的通知。

10-07 19:54