2012-10-07 6 views
14

buldum ki NSBundle içinde NSNibLoading yöntemleri:Amorti edilmiş NSNibYükleme yöntemleri (loadNibFile :, loadNibNamed :, vb) için değiştirmeler?

+[NSBundle loadNibFile:externalNameTable:withZone:] 
+[NSBundle loadNibNamed:owner:] 
-[NSBundle loadNibFile:externalNameTable:withZone:] 

tüm 10.8 kullanımdan kaldırılmış işaretli olan - daha sonra 10.8 ve hazretleri yüklemek için uygun yolu nedir?

Uygulamamda özel bir sayfa oluşturmaya çalışıyorum, özel sayfa için ile initWithWindowNibName oluşturmak zorunda mıyım?

+0

Özel sayfa bölümünü kendi ayrı sorusuna bölmeyi düşünün: Özel bir sayfayı uygulamanın en iyi yolu nedir? iyi bir başlık olurdu. – alfwatt

cevap

6

NSBundle yöntem loadNibNamed:owner: OS X v10.8 önerilmemektidir sınıfı,
loadNibNamed:owner:topLevelObjects:değildir ve yorum neden in the documentation durumu: eski yöntemlerden farklı olarak

, nesneler standart kakao bağlı bellek yönetimi kuralları; IBOutlets kullanarak veya nib içeriklerinin ayrılmasının önlenmesi için diziye referans göstererek bunlara güçlü bir referans tutmak gereklidir.

+0

Sizin durumunuzda, özel bir sayfa oluşturmama rağmen, sayfa için ayrı bir pencere denetleyicisi kullanmanızı öneririm. Benim deneyimim, baş ağrısından kaçınmanızdır. sayfaya herhangi bir kontrol eklerseniz. –

12

uygulama Aslan desteklemek için gidiyor, o zaman loadNibNamed:owner:topLevelObjects: ateş olmayacak ve Lion yayınlanırken uygulanacak istisna (tanınmayan seçici) elde edersiniz.

// loadNibNamed:owner:topLevelObjects was introduced in 10.8 (Mountain Lion). 
    // In order to support Lion and Mountain Lion +, we need to see which OS we're 
    // on. We do this by testing to see if [NSBundle mainBundle] responds to 
    // loadNibNamed:owner:topLevelObjects: ... If so, the app is running on at least 
    // Mountain Lion... If not, then the app is running on Lion so we fall back to the 
    // the older loadNibNamed:owner: method. If your app does not support Lion, then 
    // you can go with strictly the newer one and not deal with the if/else conditional. 

    if ([[NSBundle mainBundle] respondsToSelector:@selector(loadNibNamed:owner:topLevelObjects:)]) { 
     // We're running on Mountain Lion or higher 
     [[NSBundle mainBundle] loadNibNamed:@"NibName" 
             owner:self 
          topLevelObjects:nil]; 
    } else { 
     // We're running on Lion 
     [NSBundle loadNibNamed:@"NibName" 
         owner:self]; 
    } 

gerçekten Dağ Lion + için topLevelObjects:&array kullanmak istiyor ve ayrıca Lion desteklemek istiyorsanız, size loadNibFile geri düşmek gerekir gibi görünüyor: Bazı etrafında arama yaptıktan sonra ben bu geldi externalNameTable : withZone: (hem bir sınıf hem de örnek yöntemi olarak kullanılabilir) Lion koşulu için (bu konuda yanlış olabilirdim). Bunu değiştirmek için loadNibNamed:owner:topLevelObjects:'un yaratıldığı izlenimini alıyorum.

Başka bir yerde, sayfa için daha yeni "loadNibNamed:owner:topLevelObjects:" sayfasını kullanırken, sayfa için "Kapatıldığında Bırakma" işaretini kaldırmanız gerektiğini okudum.

[self.sheet close]; 
self.sheet = nil; 

emin değilim olmayan bir kalıcı pencere açıyorsunuz eğer onay kutusunu hakkında yapılması gerektiğini tam olarak ne: Eğer sayfasını kapattığınızda Bu halledilir edilmelidir. Herhangi bir fikir?

İlgili konular