Подтвердить что ты не робот

Слишком много просмотров в раскадровке - Xcode работает Slow

Я помогаю кому-то с проектом xcode, но это почти невозможно. У них около 100 контроллеров View на их раскадровке, и он работает очень медленно. Я следил за всеми инструкциями по ускорению Xcode, но они просто не помогают в этой ситуации. Вне этой раскадровки, когда мы работаем в файлах .h и .m, она работает отлично, она просто внутри раскадровки, что она работает медленно. Кто-нибудь имел опыт работы с таким проектом? Что ты сделал? Или что я могу сделать, чтобы можно было работать в раскадровке? Благодаря

4b9b3361

Ответ 1

У меня возникла такая же проблема, когда я работал над Enterprise App. В проекте у меня был только один storyboard и все представления в одной раскадровке. Открытие раскадровки привело к тому, что Xcode стал очень медленным.

Итак, я разделил раскадровку на несколько раскадровки как модульный и загрузил отдельную раскадровку на один модуль, как в приведенном ниже коде:

Если я хочу нажать контроллер вида:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"storyboardName" 
                                                     bundle:nil];
UIViewController *viewController = 
 [storyboard instantiateViewControllerWithIdentifier:@"Members_ViewController"];

[self.navigationController pushViewController:viewController animated:YES];

Ответ 2

Мое решение: Откройте новое окно из раскадровки и минимизируйте его. Таким образом, он остается в ОЗУ и не перезагружается. Работа с раскадрой теперь легко и быстро.

Ответ 3

У нас такая же проблема, и рекомендованные улучшения производительности не помогли. На MacBook Pro с SSD я вижу, что загрузка процессора идет до 80-90%, когда в режиме просмотра раскадровки и отставания в навигации невероятно расстраивает. Симулятор может занять до минуты, и Xcode часто не закрывается, требуя отставки силы.

Эти симптомы исчезают, если не просматриваются раскадровки, или раскадровка открыта как исходный код.

UPDATE: мы разложили наш проект на несколько раскадровки, а жизнь снова хороша - загрузка процессора вернулась к одиночным цифрам, а производительность сравнима с Xcode 4.6.3. Существует определенно проблема с большими раскадровки; единственное изменение, внесенное в наш код в процессе, - это обновление ссылок на основную раскадровку на вызов раскадровки с именемName.

Один из контроллеров представления в нашем проекте имеет вид контейнера, и оказалось, что проблема использования остановилась, когда этот контроллер и его контейнерный вид были перемещены в отдельную раскадровку. Возможно, это совпадение, и мы расстались с остальной частью раскадровки для обеспечения согласованности, но если бы я снова столкнулся с этой проблемой, я бы сначала переместил любые контроллеры представлений с видами контейнера в отдельную раскадровку.

Ответ 4

Если вы используете Xcode 7, ссылки на раскадровки - это быстрый способ создания нескольких раскадровки и, безусловно, поможет решить эту проблему. Отличная сторона об использовании ссылок на раскадровки - это вовсе не какой-либо дополнительный код! См. Ссылку на stackoverflow ниже для полного описания того, как ее настроить.

введите описание изображения здесь fooobar.com/questions/33982/...

Ответ 5

У меня такая же проблема. Массовое разочарование. У моей раскадровки всего 41 просмотров. И у меня работает Mac Min i7, работающий на 2,3 ГГц. Когда раскадровка открыта, требуется много времени, чтобы выполнить очень простые задачи, например, переместить UILABEL? Затем, в обратном порядке, код редактирования напоминает возвращение на ZX81. Все это очень хорошо и хорошо ударяет "интеллект" в раскадровку, но не ценой эффективности разработки. Что касается руководящих принципов "размера" раскадровки, я никогда не помню, чтобы читать, что раскадровки должны быть разделены за определенный размер. Может быть, мне нужно больше узнать.

Чтобы внести необходимые изменения, т.е. разбить раскадровку, пощекотать некоторые VC на нескольких раскадках, потребуется немного фокус. Я полагаю, если это новая лучшая практика, хорошо. Но я мог бы сделать больше, чем предполагалось.

Ответ 6

Я также согласен с организацией ваших взглядов на нескольких досках. Это становится очень удобно, когда у вас есть представление, которое вызывается из нескольких других представлений. Тогда раскадровка может стать как макароны, непонятно. В моем случае у меня был вид камеры, который можно было бы вызвать из нескольких представлений, я помещаю это в новую раскадровку, и это отлично работает. Так как представление камеры также указывало на представление порядка поиска, мне пришлось также отобразить порядок поиска на отдельной раскадровке. Снова моя основная доска рассказов упростилась.

Итак, у вас есть основная доска для справки и разделить столько, сколько вы можете на отдельные раскадровки. Я создал общий класс StoryBoardNavigation, где я централизовал все функции для вызова детских раскадров.

Вот пример:

Эта функция переходит к раскадровке под названием OrderLookupStoryboard и открывает представление в исходной позиции.

+(void) NavigateToOrderLookupFrom:(UIViewController *)vc
{
    UIStoryboard * sb = [UIStoryboard storyboardWithName:@"OrderLookupStoryboard" bundle:nil];
    UIViewController * vcTo = [sb instantiateInitialViewController];

    [UIView transitionWithView:vc.view duration:0.8     options:UIViewAnimationOptionTransitionCrossDissolve
                animations:^{
                    [vc.navigationController pushViewController:vcTo animated:NO];
                }
                completion:NULL];

}

Эта функция передает некоторые параметры в раскадровку.

+(void) NavigateToCameraFrom:(UIViewController *)vc WithSelectedZone:(int)selectedZone
{
    UIStoryboard * sb = [UIStoryboard storyboardWithName:@"CameraStoryboard" bundle:nil];
    MediaCapture * vcTo = [sb instantiateInitialViewController];
    vcTo.selectedZone = selectedZone;
    vcTo.zoneSet = YES;
    [UIView transitionWithView:vc.view duration:0.8 options:UIViewAnimationOptionTransitionCrossDissolve
                animations:^{
                    [vc.navigationController pushViewController:vcTo animated:NO];
                }
                completion:NULL];

}

Эта функция открывает представление в стиле перехода модуля:

+(void) NavigateToSignatureFrom:(UIViewController *)vc withSignee:(NSString *) Signee
{
   UIStoryboard * sb = [UIStoryboard storyboardWithName:@"SignatureStoryboard" bundle:nil];
   UIViewController * vcTo = [sb instantiateInitialViewController];

   ((SignatureVC *) vcTo).Signee = Signee;

   [vcTo setModalTransitionStyle:UIModalTransitionStylePartialCurl];
   [vc presentViewController:vcTo animated:YES completion:nil];
}

Ответ 7

Я хотел добавить, что у меня была проблема с тем, что моя раскадровка медленно реагировала при использовании контейнера с контроллером навигации внутри него. Я даже попытался поместить его в свой собственный раскадровки, и все еще было так медленно, что я даже не смог его использовать. Похоже, что когда представление контейнера изменяло размеры навигационного контроллера, эта панель вызывала проблему.

Мне удалось обойти эту проблему, выбрав контроллер навигации в раскадровке, скрыв панель навигации, сняв флажок "показывает навигационную панель" в инспекторе атрибутов и используя "isNavigationBarHidden = false" либо в viewDidLoad, либо в viewWillAppear моего представления класс контроллера.