我是IOS的完全初学者,所以问题可能是愚蠢的,但我不能看到树木的木材:
当我在XCode 4.2中开始一个新项目时,预先创建了两个实现文件,即AppDelegate.m和ViewController.m。
据我了解,他们分别声明了一个类,当我运行应用程序时,操作系统为我预先实例化了两个对象AppDelegate和ViewController。
现在我正在AppDelegate中做某些事情并希望更新一个文本标签,这是ViewController的一个属性。
但我找不到引用ViewController对象的方法。
通常,在ViewController中,我可以使用更新文本标签
self.MyTextLabel = @"myText"
。但AppDelegate是“外部”并没有实例化ViewController,因此没有可用的指针。
有人可以帮忙吗?
答案 0 :(得分:1)
iOS应用程序的结构可能非常庞大,但请允许我向您保证,这里没有任何魔力。
您的main.m
通常包含这样一行:
UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
应用程序启动时-(BOOL) application:(UIApplication*) application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
中的AppDelegate.m
将被调用。在这里,您通常会找到视图控制器的创建。在您的app委托中,您可以通过它保留在的属性访问视图控制器。
self.viewController.myTextLabel = @"myText";
但是,如果myTextLabel
是XIB文件中的插座集,则在从XIB加载控制器视图后,该属性将仅引用实际的UILabel
。一旦您自己访问.view
属性,或者将视图控制器添加到另一个视图控制器(如UINavigationController
)后,通常会发生这种情况。 (但这取决于您为项目选择的模板。)
答案 1 :(得分:0)
在xcode 4.2中,您可以在方法中找到ViewController对象的创建:
-(BOOL) application:(UIApplication*) application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
你应该看到一个看起来像
的行self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController" bundle:nil] autorelease];