2012-03-18 30 views
50

CustomViewController benim Storyboard'umda tasarlanan benim için başlangıç ​​yöntemini geçersiz kılıyor.viewController storyboard ile oluşturulan özel giriş yöntemi

şimdi (benim MainViewController olarak) yapıyor im:

self.customViewController = [[UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil] instantiateViewControllerWithIdentifier:@"CustomVC"]; 
self.customViewController.myObject = someObject; 

ve ben

[self.label setText:self.myObject.someString]; 

Bu Tamam çalışır viewDidLoad (CustomViewController) 'de var.

Ancak, doğru yol mu? CustomViewController'ım için özel bir init yöntemi (veya geçersiz kılma) eklemeli miyim? InitWithObject gibi: UIStoryboard instantiateViewControllerWithIdentifier: yerine özel init yöntemimi nasıl arayacağımı bilmiyorum ve init numarasına veya initWithNibName numaralı telefona çağrı alamıyorum.

Belki kullanmalıyım: - (id)initWithCoder:(NSCoder *)decoder.

Lütfen bana biraz öneri verin!

Teşekkür ederiz!

+0

required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) //invoke your data source here } 

biliyorum ... Ben de bu ama ... sevmiyorum her şey doğru. initWithCoder'ı özel sınıfınızda geçersiz kılabilirsiniz. Özel init için 0customViewController nesnesinin sınıf dosyası –

cevap

58

Hikaye panosundaki görünüm denetleyicileri için atanan başlatıcı -initWithCoder: dur. Hikaye panosundaki çoğu görüntüleyici denetleyici, topluluklar tarafından oluşturulduğundan, genellikle -prepareForSegue:sender: sırasında ayarlanan durumu görürsünüz.

Bir görüntü denetleyicisini, sağladığınız örnekte olduğu gibi doğrudan film şeridinden başlatıyorsanız, seçtiğiniz desen uygun olur.

+0

Yapılması gerektiği gibi şeyler yapmakta büyüktür! –

+2

Oldukça kötü bir tasarımdır, çünkü Optional'ları hızlı bir şekilde kullanmanıza (!?) Ya da geliştiricinin doğru değişkeni ayarlamayı unutması halinde muhtemel düğümlere erişmenizi sağlar. Bu "uygun" çözüm olduğu için üzücü: hızlı/nesnel c ile bu konuda iyi bir kaynak isteğe bağlı: http://www.objc.io/issue-16/power-of-swift.html –

+0

Sadece yanıtlamak için @GuilhermeSilveira yorumuna gelince, bu soru 2012'den itibaren hızlı bir şekilde halkın bilmediği bir yerdi ve hatta tasarım desenleri Objective-C ile Swift arasında çok farklıydı. Bu nedenle, eğer gelişiyorsanız, bu desene bağlı kalmamalısınız. Swift. –

0

Bu sorun için başka bir "geçici çözüm" olarak, temsilci kullanabilirsiniz. UIViewController alt sınıfınızın storyboard'undan veri kaynağı olarak görev yapacak bir protokol oluşturun. Bu veri kaynağı protokole uygun uygulamak ve sağ UIViewController alt sınıfı yükledikten sonra kullanmak:; yapıyorsun)

İlgili konular