0

Как проверить, сколько экземпляров NSWindowController уже существует? Я хочу открыть несколько окон одного и того же оконного контроллера, отображающих различное содержимое.проверить наличие нескольких экземпляров

окно открывается так:

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

Я знаю, чтобы проверить уже существующий контроллер:

if (!hwc) 
... 

Но мне нужно знать количество кратному открыто контроллеров окон. Как это будет выглядеть?

Благодаря

ответ

1

Вы можете следить за каждой из окна экземпляров в NSSet, если вам не требуется доступ к порядку, в котором они были созданы, в этом случае использовать в NSArray. Когда окно будет представлено, добавьте его в данную коллекцию, когда она будет закрыта, удалите ее. В качестве дополнительного преимущества вы можете закрыть каждое открытое окно, когда приложение завершает работу, итерации через коллекцию.

Может быть, немного что-то вроде этого:

- (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