1
resposta

Erro App Delegate

Olá, ao reproduzir o código da aula 2 e 3 da tableviewcontroller,

  • (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. ListaDeContatosViewController *lista = [ListaDeContatosViewController new]; UINavigationController *navLista = [UINavigationController alloc]; navLista = [navLista initWithRootViewController:lista]; self.window.rootViewController = navLista;

    return YES; }

ocorreu um erro nessa linha

self.window.rootViewController = navLista;

Erro: Thread 1: "-[AppDelegate window]: unrecognized selector sent to instance 0x60000112a3e0"

O que pode ter sido feito de errado?

Agradeço desde já

1 resposta

Oi Camila,

no Objective-C, o erro unrecognized selector sent to instance pode ser interpretado como um "null pointer exception" da vida. Então, usando essa interpretação fica mais fácil entender o erro:

-[AppDelegate window]: unrecognized selector sent to instance 0x60000112a3e0

Há um "null pointer exception" no atributo window da classe AppDelegate. De fato, juntando essa informação com o seu código, olha só:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    // Override point for customization after application launch. 
    ListaDeContatosViewController *lista = [ListaDeContatosViewController new];
    UINavigationController *navLista = [UINavigationController alloc];
    navLista = [navLista initWithRootViewController:lista]; 
    self.window.rootViewController = navLista;

    return YES;
}

Você chamou self.window.rootViewController antes de inicializar a propriedade window. Por isso ela é nula, e o erro unrecognized selector sent to instance.

Pra resolver isso, basta inicializar window, assim:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    // Override point for customization after application launch. 

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    ListaDeContatosViewController *lista = [ListaDeContatosViewController new];
    UINavigationController *navLista = [UINavigationController alloc];
    navLista = [navLista initWithRootViewController:lista]; 
    self.window.rootViewController = navLista;

    return YES;
}

No caso, a propriedade window foi inicializada com o tamanho da tela do aparelho.

Abraço!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software