Re: [問題] AppDelegate取得Controller??

看板MacDev作者 (我不為讀者改變作風)時間12年前 (2012/05/08 16:41), 編輯推噓2(203)
留言5則, 2人參與, 最新討論串2/3 (看更多)
呵呵 因為在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
感謝大大的回覆,主要是因為我看書它有段code是寫在AppDelegat
05/09 13:06, 1F

05/09 13:07, , 2F
然後又要更改到ui上文字,所以才會有這樣的需求 謝謝
05/09 13:07, 2F

05/09 14:51, , 3F
那本書寫的不好,應該要遵循MVC架構
05/09 14:51, 3F

05/09 21:46, , 4F
看網路上 不少人都是這樣講 而且那本書錯誤的地方真不少
05/09 21:46, 4F

05/09 21:47, , 5F
再加上Xcode的版本 不一樣 害我看得真想哭~~
05/09 21:47, 5F
文章代碼(AID): #1FgDmuwF (MacDev)
文章代碼(AID): #1FgDmuwF (MacDev)