2012-01-26 4 views
1

私はこのコードを使用しています....私はウィンドウにそのビューを置きたい、XIBファイルのビューを持っている:私はそうxibからビューをインスタンス化する方法は?

- (void) popupNotificationWithTag:(NSString *)tag fade:(double)msFade lineOne:(NSString *)lineOneText lineTwo:(NSString *)lineTwoText 
{ 
    NotificationWindow *notificationWindow; 
    NotificationWindow *tmpWindow; 
    NSEnumerator *enumerator; 

    // Walk the notification windows in the array 
    enumerator = [self.notificationWindows objectEnumerator]; 
    if(enumerator) 
    { 
     while((tmpWindow = [enumerator nextObject])) 
     { 
      if([tmpWindow.tag isEqualToString:tag]) 
      { 
       notificationWindow = tmpWindow; 
      } 
     } 
    } 

    // Make a new notification window 
    if (!notificationWindow) 
    { 
     int width = [[NSScreen mainScreen] frame].size.width; 
     int height = [[NSScreen mainScreen] frame].size.height; 

     notificationWindow = [[NotificationWindow alloc] initWithRect:NSMakeRect(width - 420, height - 130, 400, 100)]; 
     NSNib *nib = [[NSNib alloc] initWithNibNamed:@"Notification" bundle: nil]; 
     NSArray *objects; 
     [nib instantiateNibWithOwner:self topLevelObjects:&objects]; 
     [notificationWindow setContentView: [objects objectAtIndex:0]]; 

     [notificationWindow setTag:tag];   
     [self.notificationWindows addObject:notificationWindow]; 
    } 

    // Display window 
    [notificationWindow makeKeyAndOrderFront:nil]; 
    [notificationWindow display]; 
    notificationWindow.fadeOut = msFade; 
    [notificationWindow setPrimaryText:lineOneText]; 
} 

をビューがXIBファイルで唯一のものですobjectAtIndex:0はOKでしたが、その行には-[NSApplication setFrame:]: unrecognized selector sent to instance 0x100508500の例外があります。

更新私はこのコードブロックで行を置き換える:

for (id obj in objects) { 
     if ([[obj class] isSubclassOfClass:[NSView class]]) 
      [notificationWindow setContentView: obj]; 
    } 
+0

'nib instantiateNibWithOwner:self topLevelObjects:&objects];'の直後にブレークポイントを設定し、 'objects'配列のカウントがゼロより大きいかどうかを教えてください。そうであれば、どのような種類のオブジェクト( 'className'?)を見つけることができますか?インデックス0の項目は? [この質問の答えを見る](http://stackoverflow.com/questions/1144629/in-objective-c-how-do-i-test-the-object-type)これを行う方法を教えてください。 –

+0

@MichaelDautermann - 2つのオブジェクトがありますが、順序はランダムであるようです。投稿されたコードは時々動作し、他のコードは動作しません。問題を修正した編集を投稿します。 – Justin808

+0

'[[objクラス] isSubclassOfClass:[NSViewクラス]]'は '[obj isKindOfClass:[NSView class]] 'と書かれている必要があります – user102008

答えて

1

私は漠然とニブは、最初の応答者(か何か)を表し隠された第一のオブジェクトを持っていることを思い出してください。代わりにobjectAtIndex:1を試して、それが機能するかどうか確認してください。

+0

配列に2つのオブジェクトがあり、配列内のオブジェクトの順序がランダムであるように見えます。 – Justin808

+0

上記のマイケルのコメントのように、私は答えにつながったので、この権利をマークしました。 – Justin808

関連する問題