Asıl soru Objective-C içindi, ancak Swift kullanan diğer kullanıcılar için protokollerin yardımcı olabileceğini biliyorum. Temel kavram, Objective-C'de de uygulanabilir.
yerine geri pencere kontrolöre ulaşma, sen bağımlılık enjeksiyon kullanabilirsiniz:
1) pencere denetleyici ve dokümana erişmek için gereken herhangi bir görünüm denetleyicileri üzerinde document
mülkü oluştur (veya representedObject
özelliğini kullanması zaten var). Bunu daha kolay hale getirmek için belge özelliğini tanımlamak veya bu rotayı izlerseniz belge türünüze representedObject
özelliğini dökmek için bir protokol kullanabilirsiniz. Belgeye erişmesi gereken tüm görüntü denetleyicilerini, bu protokolü benimseyin. Bu) belgedir gibi belge alt sınıfının makeWindowControllers()
yöntemde
protocol DocumentAccessing {
var document: MyDocument? { get set } // could also use an implicitly unwrapped optional if the document is required to be set for the app to function
}
2), pencerenizi denetleyicisi oluşturduktan sonra, (kendine olan belge özelliğini ayarlayın. Pencere denetleyici alt sınıf içi
- (void)makeWindowControllers {
MyWindowController *windowController = MyWindowController()
windowController.document = self;
[self addWindowController:windowController];
}
3), kendi bakış denetleyicileri örneğini sonra, pencere kontrolörün belge özelliğine görünümü denetleyicisi belge özelliğini ayarlayın.
4) Şimdi görünüm denetleyiciniz yüklendiğinde, belge özelliği doldurulmalıdır.
NSDocument'in '-makeWindowControllers' uygulamasını nasıl uygularım? -addWindowController: 'varsayılan şablon gibi mi? – bluedome
evet follwos olarak uygulanır: - (void) makeWindowControllers { // Belgenin Storyboard dosya adını döndürmek için geçersiz kıl. [self addWindowController: [[NSStoryboard storyboardWithName: @ "Ana" paket: nil] instantiateControllerWithIdentifier: @ "Belge Penceresi Denetleyicisi"]]; } – Martin
NSViewController alt sınıfında '[self.view.window.windowController document]' kodunu nereye koyarsınız? – bluedome