¿Por qué se muestra un UIAlertView en la aplicación: didFinishLaunchingWithOptions: provocando un error?

En la primera ejecución de mi aplicación muestro una vista de alerta para que el usuario elija iCloud o el almacenamiento de documentos locales. Mostrando la vista de alerta provoca el siguiente error:

Se espera que las aplicaciones tengan un controller de vista raíz al final del lanzamiento de la aplicación wait_fences: no se pudo recibir respuesta: 10004003

¿Por qué está pasando esto? ¿Cómo se muestra una vista de alerta en el inicio sin get este error?

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Check the user preferences for document storage options if (![UserPreferencesHelper userDocumentStoragePreferencesHaveBeenCreated]) { // User preferences have not been set, prompt the user to choose either iCloud or Local data storage UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Use iCloud?" message:@"Would you like to store data in iCloud?" delegate:self cancelButtonTitle:nil otherButtonTitles:@"No", @"Yes", nil]; [alert show]; } } 

** ACTUALIZACIÓN **

Debo mencionar que estoy usando iOS 5 con storyboards. El controller de vista raíz se establece en el guión gráfico.

Intente replace [alert show] con:

 [alert performSelector:@selector(show) withObject:nil afterDelay:0.0]; 

Esto retrasa la alerta de un solo paso a través del runloop, presumiblemente permitiendo a los controlleres y guiones charts de su aplicación completar su configuration antes de que se presente la alerta.

Como dice, necesitas un controller de raíz para tu aplicación. Las alertas aparecen arriba de las vistas administradas por el controller normal, por lo que necesita una vista administrada por el controller para que aparezca arriba.

Antes de que su aplicación llegue al final de didFinishLaunchingWithOptions: necesita tener un set rootViewController. Puede establecer esta propiedad para un ViewController denominado viewController con:

  self.window.rootViewController = self.viewController; 

Tenga en count que la configuration de un controller como rootViewController agrega automáticamente la vista. Por lo tanto, no es necesario volver a agregar la vista con:

 [self setViewController:];