作者wemee (我不为读者改变作风)
看板MacDev
标题Re: [问题] AppDelegate取得Controller??
时间Tue May 8 16:41:25 2012
呵呵 因为在didFinishLaunchingWithOptions这个method执行的时候
你的ViewController还没有初始化
ViewController的ViewDidLoad之类有的没的都没执行过
加上Objective-C的特点 你送出去的Method 物件如果没有对应的实作
只是回传nil
所以才不容易发现Bug在哪
事实上 还是有东西索引着
只不过你要先等他初始化後 再去取用
我介绍一个简单的证明方法
你试着实做一次 改些Code了解这个流程
你在你的Proj里面再创一个ViewController
假设叫做VC2好了 然後做个NavigationController可以在这两个ViewController往返
然後在VC2里执行
//取得AppDelegate
AppDelegate *delegate =
(AppDelegate *)[[UIApplication sharedApplication] delegate];
//取得NavigationController
UINavigationController *nav =
(UINavigationController *)delegate.window.rootViewController;
//取得ViewController
ViewController *viewController =
(ViewController *)[[nav viewControllers]objectAtIndex:0];
//更改ViewController里面的label.text
[viewController.label setText:@"123"];
你会发现viewController的label确实可以透过AppDelegate去修改
以上的程式码从头到尾都是透过AppDelegate去取得viewController没错吧
你说"Appdelegate要索引到Controller里的物件,是有东西索引着"
这句话没有错 只是你要先等他初始化 才取得到
※ 引述《dm33 ()》之铭言:
: 目前在努力学习中,遇到一些问题,请问问大家
: 所开发环境是Xcode4.3.2 ios5.1
: 在旧版若在Appdelegate要索引到Controller里的物件,是有东西索引着,可是
: 新版本似乎都没有,在网路上找了一下似乎改拦用
: ViewController *viewcontroller = self.window.rootViewController
: 取得controller,而我在viewcontroller上有一个mylabel,我试着改变其
: 文字,但无效。也不知道原因,不知道大大们知道怎麽回事吗?
: - (BOOL)application:(UIApplication *)application
: didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
: ViewController *viewController = (ViewController *)self.window.rootViewController;
: [viewController.myLabel setText:@"123"];
: return YES;
: }
: //myLabel是一个IBOutlet也连接了UILabel
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 60.250.139.230
※ 编辑: wemee 来自: 60.250.139.230 (05/08 16:43)
1F:推 dm33:感谢大大的回覆,主要是因为我看书它有段code是写在AppDelegat 05/09 13:06
2F:→ dm33:然後又要更改到ui上文字,所以才会有这样的需求 谢谢 05/09 13:07
3F:推 johnlinvc:那本书写的不好,应该要遵循MVC架构 05/09 14:51
4F:→ dm33:看网路上 不少人都是这样讲 而且那本书错误的地方真不少 05/09 21:46
5F:→ dm33:再加上Xcode的版本 不一样 害我看得真想哭~~ 05/09 21:47