0

NSWindowController의 인스턴스가 이미 얼마나 많은지 확인하려면 어떻게합니까? 다른 내용을 보여주는 동일한 창 컨트롤러의 여러 창을 열고 싶습니다.기존의 복수 인스턴스 확인

.... 
hwc = [[HistogrammWindowController alloc] init]; 
.... 

내가 이미 존재하는 컨트롤러를 확인하기 위해 알고 :

창은 이런 식으로 열립니다

if (!hwc) 
... 

을하지만 윈도우 컨트롤러를 열어 복수의 수를 알아야합니다. 어떻게 생겼어? 이 경우는 NSArray를 사용하는 사람들이 만들어진 순서에 대한 액세스를 필요로하지 않는

감사

답변

1

당신은, NSSet에서 윈도우 인스턴스의 각 추적 할 수 있습니다. 윈도우가 표시되면 주어진 콜렉션에 윈도우를 추가하고 닫으면 해당 윈도우를 제거하십시오. 추가 이점으로, 응용 프로그램이 콜렉션을 반복하여 종료 할 때 열려있는 모든 창을 닫을 수 있습니다.

아마도 이런 작은 선물 :

- (IBAction)openNewWindow:(id)sender { 
    HistogrammWindowController *hwc = [[HistogrammWindowController alloc] init]; 
    hwc.uniqueIdentifier = self.uniqueIdentifier; 

    //To distinguish the instances from each other, keep track of 
    //a dictionary of window controllers for UUID keys. You can also 
    //store the UUID generated in an array if you want to close a window 
    //created at a specific order. 
    self.windowControllers[hwc.uniqueIdentifier] = hwc; 
} 

- (NSString*)uniqueIdentifier { 
    CFUUIDRef uuidObject = CFUUIDCreate(kCFAllocatorDefault); 
    NSString *uuidStr = (__bridge_transfer NSString *)CFUUIDCreateString(kCFAllocatorDefault, uuidObject); 
    CFRelease(uuidObject); 
    return uuidStr; 
} 

- (IBAction)removeWindowControllerWithUUID:(NSString*)uuid { 
    NSWindowController *ctr = self.windowControllers[uuid]; 
    [ctr close]; 
    [self.windowControllers removeObjectForKey:uuid]; 
} 

- (NSUInteger)countOfOpenControllers { 
    return [self.windowControllers count]; 
} 
+0

안녕하세요 CodaFi, 즉 쉬운 방법으로 들린다. 동일한 컨트롤러에서 다른 창을 구별하라고 할 수 있습니까? 그들 모두는 같은'hwc' 인스턴스로 열립니다. 그래서 실제로'NSSet'에 무엇이 추가됩니까? 감사합니다 – JFS

+0

당신은 그들에게 모두 독특한 식별자를 줄 수 있습니다 – CodaFi

+0

나는 본다. 나는 그 사업에 대해 아주 새로운 ... 코드로 힌트를 줄 수 있습니까? 나는 식별자를 사용한 적이 없다. 고맙습니다. – JFS