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 예외가 발생합니다.

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

'nib instantiateNibWithOwner : self topLevelObjects : & objects];'줄 바로 뒤에 중단 점을 설정하고'objects' 배열의 수가 0보다 큰지 여부를 알려줍니다. 그렇다면, 어떤 종류의 객체 ('className'?)에서 색인 0에있는 항목이 있는지 알아낼 수 있습니까? [이 질문에 대한 답변보기] (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 개의 객체가 있습니다. 배열의 객체 순서가 무작위 인 것처럼 보입니다. – Justin808

+0

위의 마이클의 의견과 마찬가지로 나는 대답으로 나를 이끌었으므로이 권리를 표시했습니다. – Justin808

관련 문제