2012-09-19 32 views
5

Xcode şablonunu kullanarak yeni bir boş standart uygulama oluşturdum. MainMenu.xib içinde pencere kaldırıldı ve bir xib ile yeni bir özelleştirilmiş NSWindowController alt sınıfı oluşturduk.Standart uygulamada bir pencere göstermek için NSWindowController nasıl kullanılır?

"WYSunFlowerWindowController.h" ve "WYSunFlowerWindowController.m" olarak adlandırıldılar.

Ve init fonksiyonu aşağıda gibi sonra ekleyin:

- (id)init 
{ 
    NSLog(@"init()"); 

    return [super initWithWindowNibName:@"WYSunFlowerWindowController" owner:self]; 
} 

Ve WYAppDelegate.m dosyası aşağıda gibidir:

static WYSunFlowerMainWindowController* windowController = nil; 

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification 
{ 
    // Insert code here to initialize your application 
    if (windowController == nil) { 
     windowController = [[WYSunFlowerMainWindowController alloc] init]; 
    } 
    [[windowController window] makeKeyAndOrderFront:windowController]; 
} 

Ve pencere gösteremez ki sorun var Ben uygulamayı başlattıktan sonra kendini. Herkes bana nedenini söyleyebilir? Kodumda bir sorun mu var?

Objective-C ve kakaoda yeni biriyim. Bu yüzden kendimce çözemediğim aptalca bir hata yapabilirim.

GÜNCELLEME:

İşte benim proje kaynağıdır. Pleas bir göz ve benim hatadır anlamaya yardım et. İnit yönteminde

https://dl.dropbox.com/u/3193707/SunFlower.zip

+0

ARC etkinleştirilmiş misiniz? Ben ARC ile ben app delegate bir özellik yapmazsanız (ben bunu yapmak için başka yollar vardır emin değilim) pencere denetleyicisi serbest ayrıldığını buldum. – sosborn

+0

ARC kullanıyorum. WindowController'ı AppDelegate Sınıfının statik alanı olarak yapıyorum. Uygulama sonlandırılıncaya kadar ayrılmayacak düşünüyorum. – morphinewan

cevap

2

, sana kendini döndürmeden önce süper init birinciye kendini ayarlamak zorunda düşünüyorum.

-(id)init 
{ 
    NSLog (@"init()"); 
    self = [super initWithWindowNibName:@"WYSunFlowerWindowController" owners:self]; 
    return self; 
} 

Düzenleme:

, o halen çalışmıyorsa Ardından, pencere denetleyici xib kontrol [windowController showWindow:self]

ile makeKeyAndOrderFront: yerine deneyin Dosya sahibi WYSunFlowerWindowController ve o ayarlandığından emin olun IBOutlet Penceresi (NSWindowController'da bildirilmiştir) pencereye bağlanır.

Düzenleme 2:

sizin @property ve denetleyici içinde @synthesize pencereden dışarı yorumlarında numaraydı. Bir süper sınıfta önceden tanımlanmış olan ayarlayıcıları ve ayarlayıcıları yeniden arama.

+0

Yardımlarınız için teşekkürler. Talimatlarını takip ettim ve hiçbir şey değişmedi. Hala çalışmıyor. – morphinewan

+0

Bahsettiğin her şeyi yaptım. Çalışmıyor. Bir bakıma proje kaynağımı indirebilir misin? https://dl.dropbox.com/u/3193707/SunFlower.zip – morphinewan

+0

Aman Tanrım, işe yarıyor! Çok teşekkür ederim. Ama alt sınıfta tanımlanmış bir pencere çıkış özelliği bu soruna neden neden karıştı? Sınıfın ebeveyninin aynı mülkünü geçersiz kılmazlar mı? – morphinewan