2012-07-27 9 views
11

Ich habe 150 UIViewController in Storyboard und Scrollen zwischen diesen Ansichten ist so langsam. Ich kann nicht einfach hinein- und herauszoomen, und es braucht etwas Zeit, um den Stall zu machen.Storyboard in Xcode ist so langsam

Ich bin auf MBPR und ich installiert Xcode 4.4

Spec: 2,3 GHz/16G/256, die ich denke, es ist genug, um so etwas zu handhaben.

Gibt es irgendwelche Optionen, Einstellungen oder Tipps/Tricks, um so viele Ansichten im Storyboard zu haben und die Leistung nicht zu verpassen.

HINWEIS: Ich habe alle möglichen Lösungen (Cache und Arbeitsbereich löschen) getan. Hat nicht funktioniert. Es hat etwas mit der Anzahl von UIViewController im Storyboard zu tun.

Dank

-Update 2016: Genau diese Frage zu aktualisieren, da es eine neue Funktion in Xcode ist 7, dass Sie die Storyboard in mehrere Storyboards Refactoring ermöglicht.

Refactoring Storyboards https://developer.apple.com/library/ios/recipes/xcode_help-IB_storyboard/Chapters/RefactorStoryboard.html

Wenn Sie den Begriff "Refactoring Storyboards" suchen Sie gute Tutorials finden :)

+0

Haben Sie Ihr Problem bereits gelöst? Vielleicht können Sie die richtige Antwort markieren –

+0

oh mein Bruder !!, 150 vc, den Schmerz fühlen: -s –

Antwort

6

Verwenden Sie definitiv mehrere Storyboards dafür. Es sind mir keine Einschränkungen bei der Verwendung von Storyboards bekannt, aber der Versuch, all diesen UI-Code gleichzeitig zu rendern, ist für Ihren Computer schwierig und auch für Entwickler ist es schwer zu verstehen.

Versuchen Sie, logisch Ihre Storyboards in Kategorien prophezeien, wie: "profileSB, feedSB, mapSB, messagesSB, settingsSB"

Hier einige gute Tutorials auf die Schaffung von diesen sind:
http://spin.atomicobject.com/2014/02/18/ios-storyboards-xcode5/
http://www.skillmasters.net/main/xcode-using-multiple-storyboards/

+0

Um diese Antwort in einer neueren Version von Xcode, Refactoring Storyboards zu vervollständigen https://developer.apple.com/library/ios/recipes/xcode_help-IB_storyboard/Chapters/RefactorStoryboard.html – Maziyar

3

150 Viewcontrollers in einem Storyboard klingt sehr viel für mich. Versuchen Sie, Ihren Fluss zu minimieren oder in mehrere Storyboards aufzuteilen, wenn Sie wirklich so viele benötigen

+1

Hallo Kumpel, klingt schrecklich, aber gibt es irgendwelche Einschränkungen bei der Verwendung von Storyboard? Die Sache ist, dass es nichts darüber gibt, wie viele Ansichten im Storyboard sein können. Ich las sie alle und da waren keine. Ich habe versucht, sie zu reduzieren und dynamisch Inhalte anzuzeigen, aber es ist nicht für mich der Client hat es vorher getan, und ich mache nur ein paar wichtige Upgrades. Ich habe nur aus Neugier gefragt, ob es irgendwelche Tipps/Tricks oder Einschränkungen gibt. Danke für die Antwort. Und dachte nicht an die Aufteilung auf zwei Storyboards. Vielen Dank. – Maziyar

1

Ich hatte eine UIStoryboard mit 10 oder mehr UIViewControllers und zusätzliche ContainerViews. Nach dem Layout der Ansichten und der Anpassung mehr und mehr, wurde die UIStoryboard mehr und mehr faul.

Mein Ansatz war, die Ansichten innerhalb einzelner UIStoryboards einzurichten. die Controller Laden wird in meinem Menü getan, wo ich ein Setup ein NSArray mit allen Kennungen für die UIViewController, die auch innerhalb der UIStoryboard sein Setup:

enter image description here

Beim Laden des Menüs, ich Schleife durch die NSArray und Laden Sie die UIViewControllers durch Kennungen aus dem spezifischen UIStoryboard.Dies ist der Ort, wo ich brauchte einen Schalter für die verschiedene UIStoryboards zu implementieren:

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]; 
} 

In meinem Fall gibt es nur ein Problem mit den segues nach den anfänglichen UINavigationController von meinem UIViewControllers trennen. Die Segmente werden nicht an einen navigationController übertragen, wenn UINavigationController nicht vorhanden ist. Deshalb habe ich eine UINavigationController auf jedem UIViewController (meines NSArray) hinzugefügt, so dass die UIStoryboardSegue wird richtig gemacht werden. Die UINavigationController muss auch nicht an eine Klasse angeschlossen werden, nur in der UIStoryboard und verbinden Sie sie mit der ersten UIViewController.

7

Es wird empfohlen, Storyboards in viele verschiedene Module aufzuteilen (jeweils in einem separaten Storyboard). Es wird diese Leistungsprobleme beseitigen, die Sie haben, und hat auch andere Vorteile, wie die allgemeine Verwaltung zu vereinfachen (keine massiven SVN-Konflikte usw.).

Allerdings hatte ich ein anderes Problem, das Storyboard Lag verursachte. Ich hatte ca. 25 View-Controller und erhielt sehr viel Verzögerung - aber nur, wenn Xcode auf einem externen Monitor lief.

Ich bemerkte, dass, wenn ich "Auto-Layout" für das Storyboard deaktiviert, die Verzögerung vollständig verschwunden wäre. Ich kehrte diese Änderung, und dann folgte den folgenden Prozess: -Delete einen Viewcontroller -test wenn es hinkt noch -Wenn noch laggy revert ändert

Schließlich ich einen gewissen Viewcontroller gefunden, die, falls sie gelöscht alle Verzögerung gestoppt. Ich habe das dann rückgängig gemacht und bin durch die Ansichten gegangen, um zu sehen, welche Ansicht den Lag verursacht hat. Letztendlich habe ich dies auf ein "UIButton" in einem "UIBarButtonItem" reduziert. Ich glaube, ich habe die "Typ" -Eigenschaft auf der Schaltfläche geändert, und dann änderte es zurück und die Verzögerung gestoppt. Von SVN scheint es, dass der Rahmen in der .storyboard Datei geändert wurde. Nach diesem Punkt kam die Verzögerung nie wieder zurück.

TLDR: Storyboard Verzögerung ist nicht immer, weil Sie zu viele Elemente im Storyboard haben. Ich schaffte es, ein Lag-Problem loszuwerden, indem ich Xcode dazu brachte, ein Layout neu zu erstellen.

Hoffen Sie, dass meine Erfahrung jemandem anderen helfen wird, ihre Probleme zu diagnostizieren/zu lösen. Ich habe etwa 0,5 Jahre gearbeitet, bis ich endlich richtig genervt war und versucht habe, das Problem zu lösen.

+0

Tnx Mate, das ist ein guter Tipp zu beachten :) – Maziyar

+0

Bingo! Ich hatte unglaubliche Langsamkeit und mein Storyboard hat nur 7 View-Controller. Zwei der VCs hatten eine UIButton in einem BarButtonItem. Ich habe diese Tasten und die sofortige Geschwindigkeit gelöscht. Jetzt kenne ich die Ursache, um eine Lösung zu finden ... – Swany

+0

Hey @Swany, wie ich in meinem Beitrag sagte, habe ich sie irgendwie entfernt und neu hinzugefügt und es stellte die Frames zurück, die die wahnsinnige Verzögerung aufhörten. Versuchen Sie es erneut hinzuzufügen, es könnte für Sie funktionieren. –