Me sale el siguiente error en mi consola:
Se espera que las aplicaciones tengan un controlador de vista raíz al final del inicio de la aplicación
A continuación se muestra mi application:didFinishLaunchWithOptions
método:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Set Background Color/Pattern
self.window.backgroundColor = [UIColor blackColor];
self.tabBarController.tabBar.backgroundColor = [UIColor clearColor];
//self.window.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"testbg.png"]];
// Set StatusBar Color
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent];
// Add the tab bar controller's current view as a subview of the window
self.window.rootViewController = self.tabBarController;
[self.window makeKeyAndVisible];
return YES;
}
En Interface Builder, el UITabBarController
delegado de 's está conectado al delegado de la aplicación.
Alguien sabe cómo solucionar este problema?
ios
objective-c
ArtSabintsev
fuente
fuente
Respuestas:
Yo tuve el mísmo problema. Revisa tu main.m. El último argumento debe establecerse en el nombre de la clase que implementa el protocolo UIApplicationDelegate.
fuente
NSStringFromClass
. Así es como Xcode ahora crea el archivo main.m. Por ejemplo:#import "AppDelegate.h
y luegoint retVal = UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
self.window
se inicializa comoself.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
Reemplazar en AppDelegate
a
fuente
addSubview
línea era parte de la plantilla del proyecto en una versión anterior de Xcode / iOS SDK. Si la aplicación retrocede mucho, es posible que la tenga incluso si no la escribió.Tuve el mismo error al intentar cambiar el primer controlador de vista que se cargó en
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
Al principio, realmente no sabía de dónde provenía el error, así que lo reduje y descubrí qué salió mal. Resulta que estaba tratando de cambiar la visualización de una vista antes de que realmente apareciera en la pantalla. La solución fue, por lo tanto, mover este código en el controlador de vista que me estaba causando problemas
- (void)viewDidLoad
a
- (void)viewDidAppear:(BOOL)animated
y el error dejó de aparecer. Mi problema específicamente fue causado por hacer un
UIAlertView
espectáculo.En su caso, le sugiero que consulte el código en el controlador de vista activa tabBarController (ya que probablemente sea un problema en ese controlador de vista). Si eso no funciona, intente establecer la configuración de inicio en el archivo plumín en lugar de en el código, o si desea hacerlo en código, intente mover el código al método apropiado del controlador de vista activa tabBarController.
¡Buena suerte!
fuente
viewDidLoad:
(sin agregar una bandera), ni debo hacer esto. De todos modos, gracias por la sugerencia!viewDidLoad
para muchas cosas, configurando todas las cosas por primera vez, como agregar datos alUITableView
. No puedo moverloviewDidAppear:
porque solo quiero que se dispare una vez.Obtuve esto cuando comencé con la plantilla "Aplicación vacía" y luego agregué manualmente un XIB. Lo resolví configurando el nombre principal de Nib como lo sugirió Sunny. El paso que falta en este escenario es eliminar
desde
Como sobrescribirá la instancia de su ventana creada en el archivo Xib. Esto supone que ha creado un ViewController y también lo conectó con su ventana y Delegado de aplicaciones en el archivo XIB.
fuente
Esto me paso a mi. Resuelto editando el archivo .plist. Especifique el nombre base del archivo NIB principal (debe ser MainWindow.xib). Espero que esto ayude.
fuente
Me encontré con el mismo problema recientemente, cuando construyo un proyecto con ios5 sdk. Al principio se estaba construyendo y funcionando correctamente, pero luego apareció el error.
En mi caso, la solución fue bastante simple.
Lo que faltaba era que de alguna manera se borró la propiedad de la interfaz principal en la pestaña de resumen de mi objetivo de aplicación. Entonces necesitaba configurarlo de nuevo.
Si este no es el punto, y si tabBarController sigue siendo nulo, siempre puede crear mediante programación su ventana y controlador raíz. Como alternativa, agregué el siguiente código a mi proyecto
Esto funcionará solo si también se implementa la solución de sho.
fuente
Actualicé a iOS9 y comencé a obtener este error de la nada. Pude solucionarlo pero agregué el siguiente código a
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
fuente
Ninguna de las sugerencias anteriores resolvió mi problema. La mía fue esta:
Añadir:
después:
en mi applelegate's
fuente
fuente
makeKeyAndVisible
no resuelve el problema. SOLO esto resolvió la advertencia para mí. ¡GRACIAS!Storyboard
tambiénCómo agregar un RootViewController para iOS5
si su aplicación no usó un RootViewController hasta ahora, simplemente cree uno;) presionando Archivo> Nuevo> Nuevo archivo; seleccione el
UIViewController subclass
nombre RootViewController , desmarque With XIB para la interfaz de usuario (suponiendo que ya tenga uno) y coloque este código en su AppDelegate :: didFinishLaunchingWithOptionsseguro: debe importar RootViewController.h y crear la variable
Aquí hay un buen artículo sobre RootViewController y AppDelegate,
fuente
También tuve este error, pero a diferencia de cualquiera de las respuestas enumeradas anteriormente, la mía se debió a que había descomentado el método 'loadView' en mi controlador recién generado (xcode 4.2, ios5).
Incluso me dijo que el método era para crear la vista mediante programación, pero lo perdí porque se parecía mucho a otros métodos como viewDidLoad que normalmente uso, no lo capté.
Para resolver, simplemente elimine ese método si no está creando mediante programación la jerarquía de vistas, también conocida como nib o storyboard.
fuente
Tengo estos problemas también. Tengo mi proyecto ejecutado en xcode4.2.1. He leído todos los comentarios allí arriba, pero nadie es genial para mí. después de un tiempo, encuentro que comenté un fragmento de código.
entonces lo descomenté. todo esta bien para mi Espero que esto sea útil para ustedes.
fuente
Asegúrese de tener esta función en el delegado de su aplicación.
Asegúrese de que didFinishLaunchingWithOptions devuelva SÍ. Si eliminó la línea 'return YES', esto causará el error. Este error puede ser especialmente común con los usuarios de guiones gráficos.
fuente
Con mi primera vista
MenuViewController
añadí:en el método de delegado de aplicaciones:
Eso funciono.
fuente
Hubo un ligero cambio alrededor de iOS 5.0 más o menos, lo que requiere que tengas un controlador de vista raíz. Si su código se basa en un código de muestra anterior, como GLES2Sample , no se creó ningún controlador de vista raíz en esas muestras de código.
Para arreglar (ese GLES2Sample, por ejemplo), directamente
applicationDidFinishLaunching
, creo un controlador de vista raíz y adjunto mi glView.Eso hace que la advertencia desaparezca y realmente no afecta su aplicación de otra manera.
fuente
Intente conectar IBOutlet del controlador de la barra de pestañas a la vista raíz en el Creador de interfaces en lugar de
Pero en realidad no he visto ese error antes.
fuente
Resolví el problema haciendo lo siguiente (ninguna de las otras soluciones anteriores ayudó):
Desde el menú desplegable asociado con "Interfaz principal", seleccione otra entrada y luego vuelva a seleccionar "Ventana principal" y luego reconstruya.
fuente
Me encontré con el mismo problema pero estaba usando
storyboard
Asignando mi
storyboard
InitialViewController
a mi ventanarootViewController
.En
y esto resolvió el problema.
fuente
Comencé a tener este mismo problema justo después de actualizar a Xcode 4.3, y solo al comenzar un proyecto desde cero (es decir, crear un proyecto vacío, luego crear un UIViewController y luego crear un archivo plum separado).
Después de poner TODAS las líneas que solía y de asegurarme de que tenía las conexiones correctas, seguí recibiendo ese error, y el archivo nib que estaba tratando de cargar a través del controlador de vista (que estaba configurado como rootController) nunca se mostró en el simulador.
¡Creé una plantilla de vista única a través de Xcode y la comparé con mi código y FINALMENTE encontré el problema!
Xcode 4.3 parece agregar por defecto el método - (vacío) loadView; a la sección de implementación del controlador de vista. Después de leer cuidadosamente los comentarios en su interior, quedó claro cuál era el problema. El comentario indica que se anula el método loadView si se crea una vista mediante programación (y estoy parafraseando), de lo contrario NO se anula loadView si se usa una plumilla. No había nada más dentro de este método, por lo que, en efecto, estaba anulando el método (y no haciendo nada) MIENTRAS estaba usando un archivo plumín, que dio el error.
La SOLUCIÓN fue eliminar completamente el método loadView de la sección de implementación, o llamar al método padre agregando [super loadView].
Lo mejor sería eliminarlo si se usa un archivo NIB, ya que agregar cualquier otro código lo anulará.
fuente
Tenía este mismo mensaje de error en el registro. Tenía una ventana emergente UIAlertView en la aplicación: didFinishLaunchingWithOptions. Lo resolví retrasando la llamada a alertView para permitir que el controlador de vista raíz termine de cargarse.
En la aplicación: didFinishLaunchingWithOptions:
que llama después de 1 segundo:
fuente
Yo tuve el mismo problema. Si está creando una aplicación basada en ventanas "desde cero" como yo, deberá hacer lo siguiente: (tenga en cuenta que estos son los pasos para Xcode 4.2).
0. Asegúrese de que el delegado de su aplicación cumpla con el protocolo UIApplicationDelegate.
Por ejemplo, supongamos que nuestro delegado se llama MyAppDelegate. En MyAppDelegate.h, deberíamos tener algo como esto:
1. Especifique el delegado de la aplicación en main.m
Por ejemplo,
2. Cree un archivo de interfaz de ventana principal.
Para hacer esto, haga clic derecho en su proyecto y elija Nuevo archivo. Desde allí, elija Ventana en la sección iOS -> Interfaz de usuario.
Después de agregar el archivo a su proyecto, vaya al resumen del proyecto (haga clic con el botón izquierdo en el proyecto; haga clic en resumen). En Información de implementación de iPhone / iPod (y la sección correspondiente del iPad si lo desea) y seleccione su nuevo archivo de interfaz en " Interfaz principal "cuadro combinado.
3. Conéctelo todo en el editor de interfaz
Seleccione su archivo de interfaz en la lista de archivos para abrir el editor de interfaz.
Asegúrese de que el panel de Utilidades esté abierto.
Agregue un nuevo Objeto arrastrando un Objeto desde la lista de Objetos en el panel de Utilidades al espacio arriba de debajo de su objeto de Ventana. Selecciona el objeto. Haga clic en el inspector de identidad en el panel Utilidades. Cambie la clase al delegado de la aplicación (MyAppDelegate, en este ejemplo).
Abra el inspector de conexiones para MyAppDelegate. Conecte la salida de la ventana a la ventana que ya existe en el archivo de interfaz.
Haga clic en el Propietario del archivo a la izquierda y luego haga clic en el inspector de identidad en el panel Utilidades. Cambiar la clase a
UIApplication
Abra el inspector de conexiones para el Propietario del archivo. Conecte la salida de delegado al objeto MyAppDelegate.
4. Finalmente, y muy importante, haga clic en el objeto Ventana en el archivo de interfaz. Abra el inspector de atributos. Asegúrese de que "Visible en el lanzamiento" esté marcado.
Eso es todo lo que tenía que hacer para que funcionara para mí. ¡Buena suerte!
fuente
Si usa MTStatusBarOverlay, obtendrá este error.
MTStatusBarOverlay crea una ventana adicional (ventanas [[UIApplication sharedApplication]) que no tiene un controlador raíz.
Esto no parece causar un problema.
fuente
Recibí el mismo error después de reemplazar mi interfaz de usuario con un Storyboard, usando XCode 4.6.3 e iOS 6.1
Lo resolvió borrando todo el código de didFinishLaucnhingWithOptions en AppDelegate
fuente
OrdoDei dio una respuesta correcta y valiosa. Estoy agregando esta respuesta solo para dar un ejemplo de un
didFinishLaunchingWithOptions
método que usa su respuesta, así como para tener en cuenta los comentarios de los demás con respecto al Controlador de navegación.fuente
Esto ocurrió para mí porque accidentalmente comenté:
desde
fuente
Pude configurar el controlador de vista inicial en la pantalla de resumen de xcode.
Haga clic en el nombre superior del proyecto en el explorador de archivos de la izquierda (debe tener un pequeño icono de plano). En la columna central, haga clic en el nombre de su proyecto debajo de 'OBJETIVOS' (debe tener un pequeño ícono de lápiz 'A' al lado). Busque en 'Información de implementación de iPhone / iPod' y busque 'Interfaz principal'. Debería poder seleccionar una opción del menú desplegable.
fuente
Además de la respuesta "sho", eso es correcto (el cuarto parámetro de UIApplicationMain debería ser el nombre del controlador principal), agrego algunos comentarios.
Recientemente he cambiado el 'modelo' de una aplicación mía usando MainWindow.xib para construir una ventana mediante programación. La aplicación utilizó una plantilla anterior que creó esa ventana principal automáticamente. Como quería admitir una vista de controlador diferente XIB para iPhone 5, es más fácil elegir el XIB correcto mediante programación cuando se crea el delegado de aplicaciones. También eliminé MainWindow.xib del proyecto.
El problema era que olvidé llenar el cuarto parámetro en la aplicación principal de UIA y OLVIDÉ ELIMINAR MainWindow de "Interfaz principal" en el Resumen del proyecto.
Esto causó un GRAN problema: generó la advertencia inofensiva "Se espera que las aplicaciones ..." en los dispositivos de desarrollo, pero cuando fue a App Store, se rompió en los teléfonos de los consumidores y se bloqueó porque MainWindow ya no estaba en el paquete. Tuve que solicitar una revisión acelerada para la corrección de errores.
Otro síntoma es que a veces aparecía un bloque blanco, como una UIView en blanco, cuando se cambiaba la Configuración y la aplicación se ponía en primer plano. En el iPhone 5 estaba claro que era un bloque de 320x480. Quizás la MainWindow que faltaba se estaba creando en modo de desarrollo, usando el tamaño anterior. Acababa de encontrar este error cuando los primeros informes del bloqueo llegaron a la bandeja de entrada.
La instalación de la aplicación desde App Store en lugar de desde XCode mostró que la aplicación realmente se bloqueó, y el problema de MainWindow se reveló en el registro, por lo que pude ver que no era una combinación especial de dispositivos + versiones de iOS.
fuente
Para agregar a la respuesta de Mike Flynn, desde que actualicé a Xcode 7 y ejecuté mi aplicación en un dispositivo iOS 9, agregué esto a mi
(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
fuente
Este problema ocurre cuando no tiene Interface Builder configurado correctamente.
Asegúrese de que la ventana de Delegado de la aplicación y las tomas viewController estén conectadas:
En su MainWindow.xib, mantenga presionado el control, haga clic en Delegado de aplicaciones y arrastre hasta el objeto Ventana. Seleccionar ventana Mantenga presionado el control y seleccione el delegado de la aplicación nuevamente, arrastre a su controlador de vista raíz y seleccione viewController.
fuente
Este error también aparece cuando el propietario del archivo de MainWindow.xib está configurado incorrectamente.
El propietario del archivo es UIApplication
-> objeto insertado de la clase delegada de la aplicación con salida de ventana conectada a la ventana
fuente