IOS:预先创建的对象如何找到自己?

时间:2012-02-07 19:00:25

标签: objective-c cocoa-touch object ios5 communication

我是IOS的完全初学者,所以问题可能是愚蠢的,但我不能看到树木的木材:

当我在XCode 4.2中开始一个新项目时,预先创建了两个实现文件,即AppDelegate.m和ViewController.m。

据我了解,他们分别声明了一个类,当我运行应用程序时,操作系统为我预先实例化了两个对象AppDelegate和ViewController。

现在我正在AppDelegate中做某些事情并希望更新一个文本标签,这是ViewController的一个属性。

但我找不到引用ViewController对象的方法。

通常,在ViewController中,我可以使用更新文本标签 self.MyTextLabel = @"myText"。但AppDelegate是“外部”并没有实例化ViewController,因此没有可用的指针。

有人可以帮忙吗?

2 个答案:

答案 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];