Re: [問題] AppDelegate取得Controller??
呵呵 因為在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)
推
05/09 13:06, , 1F
05/09 13:06, 1F
→
05/09 13:07, , 2F
05/09 13:07, 2F
推
05/09 14:51, , 3F
05/09 14:51, 3F
→
05/09 21:46, , 4F
05/09 21:46, 4F
→
05/09 21:47, , 5F
05/09 21:47, 5F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 3 篇):