Вы можете следить за каждой из окна экземпляров в 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];
}
Здравствуйте CodaFi, это звучит как легкий подход. Не могли бы вы сказать, что вы отличаете разные окна от одного и того же контроллера? Все они открываются одним и тем же экземпляром 'hwc'. Итак, что на самом деле добавлено в 'NSSet'? Спасибо – JFS
Вы можете дать им уникальный уникальный идентификатор – CodaFi
Я вижу. Я довольно новичок в этом бизнесе ... Не могли бы вы дать мне подсказку по коду? Я никогда не использовал идентификаторы. Спасибо. – JFS