Я воссоздаю какой-то UIAlertView
, свойственный моему приложению, поэтому я подклассифицирую UIWindow
, чтобы сделать это. Окно добавляется к [UIApplication sharedApplication].windows
, но на самом деле его не показывают. Я подрезал его вниз к этой небольшой кусок кода:UIWindow's makeKeyAndVisible не играет хорошо с ARC
UIWindow *testWindow = [[UIWindow alloc] initWithFrame:self.view.bounds];
testWindow.backgroundColor = [UIColor blueColor];
[testWindow makeKeyAndVisible];
Когда я вхожу [UIApplication sharedApplication].windows
, я вижу:
"<UIWindow: 0x83774f0; frame = (0 0; 320 480); opaque = NO; autoresize = RM+BM; layer = <UIWindowLayer: 0x8377660>>",
"<UIWindow: 0x8382630; frame = (0 0; 300 400); layer = <UIWindowLayer: 0xf573e60>>"
И еще, что второе окно с синим цветом фона является nowehere видно.
ОБНОВЛЕНИЕ: это кажется проблемой только при включенном ARC. Я создал 2 новых проекта «единого вида», один с включенным ARC, а другой с отключенным ARC. Оба идентичны, и я добавляю код UIWindow в viewDidAppear:
главного контроллера. Когда я запускаю приложения в симуляторе, синее окно появляется только в проекте с отключенным ARC. Похоже, что ARC слишком быстро избавляется от моего UIWindow, поэтому у него даже нет времени, чтобы появиться. Сделать это __strong
не помогло. Тем не менее невежественные ...
Это отвечает на множество вопросов, спасибо! – samvermette
Как вы рекомендовали, я превратил его в подкласс UIView, который, в свою очередь, создает собственный UIWindow. Придавая этому окну сильное свойство, я уверен, что окно сохраняется, отображается и удаляется, когда я устанавливаю его на нуль. Теперь благодаря вам ARC имеет больше смысла! – samvermette