2012-01-26 3 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 было бы в порядке, но я получаю исключение -[NSApplication setFrame:]: unrecognized selector sent to instance 0x100508500 в этой строке.

Update я заменил строку с этим блоком кода:

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

Задайте точку останова сразу после строки 'nib instantiateNibWithOwner: self topLevelObjects: & objects];' и сообщите нам, если ваш массив 'objects' имеет число больше нуля. Если да, можете ли вы узнать, какой объект ('className'?) Элемент в индексе нуль? [См. Ответ на этот вопрос] (http://stackoverflow.com/questions/1144629/in-objective-c-how-do-i-test-the-object-type), чтобы рассказать вам, как это сделать. –

+0

@MichaelDautermann - есть 2 объекта, но порядок кажется случайным. Мой опубликованный код работает иногда, а не другие. Я опубликую исправление, исправляющее проблему. – Justin808

+0

'[[obj class] isSubclassOfClass: [NSView class]]' должно быть записано как '[obj isKindOfClass: [NSView class]]' – user102008

ответ

1

Я смутно помню, что крупка есть скрытый 1-й объект, представляющие первый ответчик (или что-то). Попробуйте вместо objectAtIndex: 1 посмотреть, работает ли это.

+0

В массиве есть 2 объекта, иногда устанавливается и работает, а иногда и 0, поэтому он выглядит как порядок объектов в массиве случайным. – Justin808

+0

Я отметил это правильно, поскольку это привело меня к ответу, как и комментарий Майкла выше. – Justin808

Смежные вопросы