Genel olarak, sistem bir storyboard ile görünüm denetleyicisi somutlaştırmasını işlemelidir. İstediğiniz şey, görsel senaryo taslağınızı doğru bir şekilde kurduysanız self.window.rootViewController
zaten doğru şekilde başlatılmış olması gereken görünüm denetleyicileri başlatmanın aksine, bir referans alarak viewController hiyerarşisini geçmek .
Öyleyse, diyelim ki sizin rootViewController
bir UINavigationController ve sonra onun üstten görünüm denetleyicisine bir şey göndermek istiyorsunuz, bunu AppDelegate'inizde şu şekilde yaparsınız didFinishLaunchingWithOptions
:
UINavigationController *nav = (UINavigationController *) self.window.rootViewController;
MyViewController *myVC = (MyViewController *)nav.topViewController;
myVC.data = self.data;
Swift'de çok benzer olursa:
let nav = self.window.rootViewController as! UINavigationController;
let myVC = nav.topViewController as! MyViewController
myVc.data = self.data
Normal öykü panosunun yüklenme şeklini atlamak ve tüm film şeridini kendiniz yüklemek istemiyorsanız, uygulama temsilcisinden gelen film şeridi kimliklerini kullanarak görünüm denetleyicilerini gerçekten başlatmamalısınız. AppDelegate'den sahneleri başlatmak zorunda kalırsanız, büyük olasılıkla yanlış bir şeyler yapıyorsunuzdur. Demek istediğim, bir nedenden ötürü, yığının aşağısındaki bir görünüm denetleyicisine veri göndermek istediğinizi hayal edin, AppDelegate verileri ayarlamak için görünüm denetleyicisi yığınına ulaşmamalıdır. Bu onun işi değil. Bu iş, rootViewController'dir. Bırakın rootViewController kendi alt öğelerini yönetsin! Bu nedenle, sistem tarafından normal film şeridi yükleme işlemini info.plist dosyasındaki referansları kaldırarak atlasaydım, en çok rootViewController'ı kullanarak başlatırdım.instantiateViewControllerWithIdentifier:
ve bir UINavigationController gibi bir konteyner ise muhtemelen köküdür. Kaçınmak istediğiniz şey, film şeridi tarafından halihazırda somutlaştırılmış olan görünüm denetleyicilerini somutlaştırmaktır. Bu çok gördüğüm bir problem. Kısacası, kabul edilen cevaba katılmıyorum. Aksi takdirde 2 film şeridi yükleyeceğinizden, posterler storyboard yüklemesini info.plist'ten kaldırmak anlamına gelmediği sürece yanlıştır, bu bir anlam ifade etmez. Muhtemelen bir bellek sızıntısı değildir çünkü sistem kök sahneyi başlattı ve onu pencereye atadı, ama sonra siz gelip onu yeniden başlattınız ve yeniden atadınız. Uygulamanız oldukça kötü bir başlangıç yaptı!