Как я могу реализовать свой собственный метод получения для настраиваемого UIWindow?

Я пытаюсь реализовать свой собственный класс UIWindow. Он называется SNWindow. Я читал, что вам нужно реализовать свой собственный метод получения, и это то, что я сделал, но он никогда не проходит мимо «точки 1». Он бесконечно регистрирует «Точку 1», показывая черный экран на iPhone.

AppDelegate.h

#import <UIKit/UIKit.h>
#import "SNWindow.h"

@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) SNWindow *window;
- (SNWindow *)window;
@end

AppDelegate.m

...

- (SNWindow *)window
{
    NSLog(@"Point 1");

    //
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];

    //
    UIViewController *viewController = [storyboard instantiateInitialViewController];

    //
    _window = [[SNWindow alloc] init];
    _window.rootViewController = viewController;

    NSLog(@"Point 2");

    return _window;
}

Есть идеи, как это исправить?


person Vulkan    schedule 19.07.2014    source источник
comment
с помощью отладчика поместите точку останова после первого оператора NSLog и пройдитесь по коду, чтобы увидеть, где он завис ...   -  person Michael    schedule 19.07.2014
comment
Если вы используете раскадровку, вы не можете взять окно, пожалуйста, посмотрите в Apple doc, вы найдете свое решение.   -  person Mohit    schedule 19.07.2014


Ответы (1)


Не вводите свойство window как SNWindow; введите его как UIWindow, как обычно. Ваш код в вашем классе делегата приложения должен выглядеть следующим образом:

- (UIWindow*) window {
    UIWindow* w = self->_window;
    if (!w) {
        w = [[SNWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
        self->_window = w;
    }
    return w;
}

Остальная часть делегата приложения, такая как application:didFinishLaunching..., должна просто продолжать и делать то, что обычно делает (что может быть не более чем ответом YES).

person matt    schedule 19.07.2014
comment
И смотрите мое полное обсуждение здесь: apeth.com/iOSBook/ch14.html#_the_window - person matt; 19.07.2014