SORU
10 EYLÜL 2010, Cuma


Anlayış NSWindowController açıklama

Projelerde NSWindowController birkaç kez kullandım, ve bu önemli bir sınıf geride kavramları çok kaba bir bilgim var gibi hissediyorum. Bu yazı ile yapmak istediğim şey/kendi anlayışlarının doğru, ve umarım diğer öğrencilerin anlayış bu ilk adım olsun yardımcı düzenlemektir.bir bakıştabulduğum kavramlar, genel bakış, ve en iyi uygulamaları çok yararlı olduğunu ve sık sık belgelerinde eksik. İşte benim NSWindowController (sorular kalın serpiştirilmiş):

  • Bir NSWindowController (nswc gibi) kullanıcı arasındaki tutkal arabirimi öğeleri ve model nesneleri hareket olarak, her pencere uç hemen altında bulunmaktadır (kavramsal olarak), onlar/denetimi temsil eden alt sınıf. Temel olarak, uygulama her pencere kendi nswc gibi onun alt sınıfı olmalıdır.
  • Kalem ucu Dosyanın Sahibi her zaman nswc gibi alt sınıfı olmalıdır.Bu bile MainMenu için geçerlidir.xib uygulama?
  • window nswc gibi özelliği her zaman Interfacebuilder'ı içinde oldukça kullanışlı bağlantılı olmalıdır.
  • 'Başlangıç' yöntemi, [mycontroller window] bakın uç yük olacaktır. [super initWithWindowNibName:], kullanmak, geçersiz kılmakBu da MainMenu için nswc gibi durumda olmalıdır.bu başlangıçta açılmış olsa bile pencere xib,?
  • Bu nswc gibi çok fazla ağır kaldırma yapmak değil, sadece nesnelerin örneklerine mesajları geçmek, ve UI nesneleri mevcut.
  • UI bağlama veya tablo için bir temsilci olarak hareket, vb., kullanarak değiştirebilirsiniz ya da aktif bir biçimde değişen UI öğeleri zaman bunu inceleyen bir değişiklik, ya da açılan herhangi birinin yukarıda (hangisini kullanmak gibi bir maddenin tat, artılarını ve eksilerini her taraftan).
  • Bir nswc gibi gerektiğinde diğer NSWCs örnekleri (açarken örneğin, bir pencere alt) oluşturabilirsiniz.
  • [mycontroller showWindow:nil] ön ilişkili penceresini görüntülemek için kullanın. Eğer camdan bir levha gibi görünmesini istiyorsanız, bir şey gibi kullanın:

    NSWindowController* mycontroller = [[MyController alloc] init];
    [NSApp beginSheet: [mycontroller window]
       modalForWindow: [self window] 
        modalDelegate: self 
       didEndSelector: @selector(didEndMySheet:returnCode:contextInfo:)
          contextInfo: nil];
    

didEndSelector: üst pencere nswc gibi bir yöntem olmalı ve erişim ve yayın 'mycontroller' [sheet windowController]ile. - Pencereyi kapatmak nswc gibi pencere performClose: yöntemi için arayın.

Bazı Sorular Vardır

  • MainMenu penceresinin nswc gibi aynı zamanda uygulama temsilci olması gerekir, ya da bu farklı bir sınıf olmalıdır?
  • Aynı şekilde, ana nswc gibi dosyaları (/bırakma ve açma sürükleyin) işlemek, ya da app temsilci geçti mi olmalı, yoksa bu sadece zevk meselesi olmalıdır?

Bu kötü bir uygulama olduğunu, ya da sadece düz yanlış varsa düzeltin lütfen. NSWindowController benim anlayış netleştirmek için arıyorum, herhangi bir ilave (en iyi uygulamalar, deneyimler, sorunlar şeklinde) son derece mutluluk duyacağız.

Teşekkürler Laurie

CEVAP
10 EYLÜL 2010, Cuma


Pencere denetleyicileri aslında ne için?

Pencere denetleyicileri kaynakları UCU ayrılan bellek yönetmek için UÇ bir dosyadan ve bir pencere yüklemek için araçlardır. NSWindowControllers bir temelde, her pencere için aynı kodu yazmak veya kendi pencere denetleyici bir sınıf icat etmek zorunda önce.

Tabii ki de Model/Görünüm/Denetleyici anlamda denetleyicileri, modeli nesneleri için pencerenin manzarası bağlamak için doğru yer. Bunu yapmak için genellikle temsilci olarak hareket etmeniz veya veri görüntülemek için kaynak nesne. Bu kısmı tamamen haklısın.

Ayrıca pencere denetleyicileri kod yeniden kullanım için bir araçtır. Kolay pencere denetleyici sınıf ve başka bir projeye. XİB/UÇ bırakmak için yapar ve orada kullanın.

Yani evet, bir UÇ her pencere bir pencere denetleyicisi, bir istisna dışında sahibi olmalıdır. Aslında, bu sadece iyi kod için bir kılavuz, bir şey onu zorlar.

WindowControllers ve MainMenu.xib

MainMenu.xib farklı bir şey, bir pencere denetleyicisi kullanabilirsiniz. Bu UÇ bu olmalı NSApplication ile yüklü alır "sahibi". Dosyaları NSApplication ve UÇ arasında bir pencere denetleyicisi almak için yolu yoktur. O da değil kullanmak için gerekli bir pencere denetleyicisi için bellek yönetimi yok. çünkü uygulama nesne hayat için tüm çalışma programı, öyle değil mi var temiz kalmış kaynaklardan UÇ zaman alır kaldırıldı.

Eğer gerçekten ana penceresi için pencere kontrol olamaz MainMenu.xib koy.

Bu yardımcı olur umarım. Muhtemelen pencere denetleyicileri hakkında söylenecek çok şey daha var

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Adam Washington

    Adam Washing

    12 Mayıs 2006
  • Gee Cee

    Gee Cee

    1 AĞUSTOS 2009
  • pjtoohot

    pjtoohot

    15 NİSAN 2008