2012-07-27 19 views
11

Tengo 150 UIViewController en Storyboard y el desplazamiento entre estas Vistas es muy lento. No puedo acercar ni alejar la imagen con facilidad y me toma un tiempo muy serio hacer pocilga.Storyboard en Xcode es tan lento

Estoy en MBPR y yo instalado Xcode 4.4

Spec: 2,3 GHz/16G/256 que creo que es suficiente para manejar tal cosa.

Existen opciones, configuraciones o consejos/trucos para tener tantas vistas en el guión gráfico y no te pierdas el rendimiento.

NOTA: He realizado todas las soluciones posibles (eliminación de caché y espacio de trabajo). No funcionó Tiene algo que ver con la cantidad de UIViewController en Storyboard.

Gracias

Actualización 2016: Sólo para actualizar esta pregunta ya que hay una nueva característica en Xcode 7 que le permite refactorizar el guión gráfico en varios guiones gráficos.

refactoración, guiones gráficos https://developer.apple.com/library/ios/recipes/xcode_help-IB_storyboard/Chapters/RefactorStoryboard.html

Si usted busca el término "storyboards refactorización" encontrará buenos tutoriales :)

+0

¿Ya ha resuelto su problema? Tal vez puedas marcar la respuesta correcta –

+0

¡oh mi hermano!, 150 vc, sintiendo el dolor: -s –

Respuesta

6

Definitivamente utiliza varios guiones gráficos para esto. No conozco ninguna limitación en el uso de guiones gráficos, pero intentar procesar todos esos códigos de interfaz de usuario de una vez es difícil para su máquina y también es difícil de entender para los desarrolladores.

Trata de adivinar lógicamente sus guiones gráficos en categorías tales como: "profileSB, feedSB, mapSB, messagesSB, settingsSB"

Estos son algunos buenos tutoriales sobre la creación de estos:
http://spin.atomicobject.com/2014/02/18/ios-storyboards-xcode5/
http://www.skillmasters.net/main/xcode-using-multiple-storyboards/

+0

Para completar esta respuesta en una versión más nueva de Xcode, Refactoring Storyboards https://developer.apple.com/library/ios/recipes/xcode_help-IB_storyboard/Chapters/RefactorStoryboard.html – Maziyar

3

150 ViewControllers en uno Storyboard suena muchísimo para mí. Intenta minimizar el flujo o dividir en varios guiones gráficos si realmente necesitas tantos

+1

Hola amigo, suena horrible pero ¿hay alguna limitación en el uso de Storyboard? La cuestión es que no hay nada sobre cuántos puntos de vista puede haber en Storyboard. Los leí todos y no había ninguno. Traté de reducirlos y mostrar contenido de forma dinámica, pero no es para mí que el cliente lo haya hecho antes y solo estoy haciendo algunas mejoras importantes. Acabo de preguntar por curiosidad para ver si hay consejos/trucos o incluso una limitación. Gracias por responder. Y no pensé en la división de dos Storyboards. Gracias. – Maziyar

1

Tuve un UIStoryboard con 10 o más UIViewControllers y ContainerViews adicionales. Después de diseñar las vistas y personalizar más y más, el UIStoryboard se volvió más y más vago.

Mi enfoque era configurar las vistas dentro del único UIStoryboards. La carga de los controladores se realiza dentro de mi menú, en el que configurar una NSArray con todos los identificadores para el UIViewController que también tienen que ser configurado dentro de la UIStoryboard:

enter image description here

Al cargar el menú, que bucle a través del NSArray y cargue el UIViewControllers por identificadores del UIStoryboard específico.Este es el lugar donde tenía que poner en práctica un interruptor, para los diferentes UIStoryboards:

self.arrayVCAll = [NSMutableArray new]; 
for (NSArray *array in _arrayViewControllerAll){ 

    NSMutableArray *arrayTemp = [NSMutableArray new]; 

    for (UIViewController *vc in array){ 
     NSString *strViewController = [NSString stringWithFormat:@"%@", vc]; 
     UIStoryboard *storyboard; 

     if([strViewController isEqualToString:@"CustomOneStoryboard"]){ 
      storyboard = [UIStoryboard storyboardWithName:@"FirstVC" bundle:nil]; 

     } else if([strViewController isEqualToString:@"CustomTwoStoryboard"]){ 
      storyboard = [UIStoryboard storyboardWithName:@"SecondVC" bundle:nil]; 

     } else { 
      storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
     } 

     UIViewController *controller = [storyboard instantiateViewControllerWithIdentifier:strViewController]; 

     MyNavController *nav = [[MyNavController alloc] initWithRootViewController:controller]; 
     [arrayTemp addObject:nav]; 
    } 

    [self.arrayVCAll addObject:arrayTemp]; 
} 

En mi caso, sólo había un problema con los segues después de la separación de la inicial de mi UINavigationControllerUIViewControllers. Los segmentos no presionarán a un Control de navegación, si no hay una inicial UINavigationController. Es por eso que agregué un UINavigationController en cada UIViewController (de mi NSArray) para que el UIStoryboardSegue se haga correctamente. El UINavigationController tampoco necesita estar conectado a una clase, simplemente inclúyalo dentro del UIStoryboard y conéctelo al primer UIViewController.

7

Se considera práctica recomendada dividir los guiones gráficos en muchos módulos diferentes (cada uno en un guión gráfico aparte). Eliminará estos problemas de rendimiento que tiene y también tiene otras ventajas, como facilitar la gestión en general (sin conflictos masivos de SVN, etc.).

Sin embargo, tuve otro problema que estaba causando el retraso del guión gráfico. Tenía aproximadamente 25 controles de vista y estaba recibiendo MUCHO retraso, pero solo cuando Xcode se estaba ejecutando en un monitor externo.

Me di cuenta de que si desactivaba "diseño automático" para el guión gráfico, el desfase desaparecería por completo. Yo invertí este cambio, y luego siguió el siguiente proceso: -Eliminar un ViewController test si aún está -si todavía Revert lag cambia

Finalmente encontré un cierto ViewController que si se suprime todo detuvo lag. Luego revertí esto y revisé las vistas para ver qué vista causó el desfase. Eventualmente reduje esto a un "UIButton" dentro de un "UIBarButtonItem". Creo que cambié la propiedad "Tipo" en el botón, luego la cambié y el retraso se detuvo. Desde SVN parece que el marco fue cambiado en el archivo .storyboard. Después de este punto, el retraso nunca volvió.

TLDR: El retraso del guion gráfico no siempre se debe a que tiene demasiados elementos en el guión gráfico. Logré deshacerme de un problema de retraso haciendo que Xcode volviera a hacer un diseño.

Espero que mi experiencia ayude a otra persona a diagnosticar/resolver sus problemas. Estuve trabajando durante aproximadamente 0.5 años antes de que finalmente me molestara y tratara de resolver el problema.

+0

Tnx mate que es un buen consejo a tener en cuenta :) – Maziyar

+0

¡Bingo! Tuve una lentitud increíble y mi guión gráfico solo tiene 7 controladores de vista. Dos de los VC tenían un UIButton en un BarButtonItem. Eliminé esos botones y la velocidad instantánea. Ahora sé la causa, para encontrar una solución ... – Swany

+0

Hola @Swany, como dije en mi publicación, los quité y los volví a agregar, y reinicié los marcos que detenían el retraso insano. Intenta volver a agregarlos, podría funcionar para ti. –