Еще один крик о помощи в этом предупреждении.wait_fences: не удалось получить ответ: 10004003 (снова)
Прежде всего, я рассмотрел все вопросы здесь, в другом месте, и ни один из них не соответствует моей ситуации. Он не имеет ничего общего с боксами Alert и уходит в отставку в качестве первого ответчика и не выполняет никакой анимации до того, как будут отображаться представления. Моя проблема возникает при создании пользовательской клавиатуры на основе UIView.
Во-вторых, я считаю, что я могу заставить предупреждение появиться/исчезнуть по желанию. Я просто очень смущен, почему, поэтому я ищу больше объяснений, чем решение.
Существует слишком много кода, чтобы разместить здесь, так что я просто дать описание того, что происходит:
ViewController «Calc» конкретизирует пользовательские UIView на основе «DataView» в loadView в ВК , а затем добавляет его в качестве дополнительного представления VC.
«DataView» конкретизирует пользовательский UITextField на основе «TextFieldKPD» в методе инициализации в DataView в
«TextField» инстанцируют пользовательские UIView на основе «KeyPad» в методе инициализации текстовой поля, и присваивает KeyPad к TextField-х inputView.
«KeyPad» создает 13 UIButtons типа UIButtonTypeCustom, считывает и присваивает «нажатые» и «не нажатые» изображения для каждой кнопки, а также устанавливает действия для кнопок. Затем он добавляет каждую кнопку в качестве подзадачи самого себя. (Контролируя, когда в UIView жизненного цикла KeyPad, что эта конструкция имеет место, то, как я могу повлиять на предупреждение wait_fences: см. Ниже)
В «Calc» ViewController является тот, который изначально представлен пользователю , Я отслеживал предупреждение wait_fences как возникшее после конца метода viewDidLayoutSubViews Calc и до вызова метода viewDidAppear. Обратите внимание, что KeyPad не отображается, когда отображается Calc.
я появляюсь, чтобы иметь возможность контролировать действие wait_fences предупреждения путем изменений как строится Клавиатура:
Если UIButtons инстанцируется и добавляет в качестве подвидов в методе инициализации кнопочной панели, то Я получу предупреждение один раз и один раз.
Если вместо этого кнопки создаются и добавляются в методе layoutSubViews KeyPad, предупреждение не появляется. (Но KeyPad не эффективно получить построены, пока не нажмете на TextField - до сих пор, не wait_fences не предупредив, то либо)
Там нет анимации или что-нибудь в loadView Calc в. Он создает экземпляр и присваивает весь путь вниз.
Итак, любые комментарии к этой версии wait_fences?
EDIT 1, Jan 30th - теперь с еще большим путаницей!
Мне было скучно сегодня утром, поэтому я решил сыграть с моим кодом, чтобы узнать, могу ли я лучше изолировать генерацию предупреждения.Я сузил его к следующему, совершенно бесполезному коду, с помощью которого я могу теперь вызвать предупреждение:
-(void)loadImages
{
UIImage* image;
for(int i=0; i<16; i++) {
image = [UIImage imageNamed:@"StupidFileNameThatDoesNotExist"];
}
}
Если я выполняю [self loadImages]
в методе инициализации из KeyPad
затем появляется предупреждение. Но этот код ничего не делает, поскольку файл не существует. Я считаю, что если счетчик циклов достаточно мал, чтобы предупреждение уходило, но я не определил нижний предел.
Если я заменить фактическую загрузку изображения с
[UIImage imageWithContentsOfFile:@"StupidFileNameThatDoesNotExist"]
и до сих пор называют метод во время KeyPad
инициализации, то я, кажется, не получить предупреждение. Одно очевидное различие между этими двумя способами загрузки изображения заключается в том, что imageNamed
кэширует изображение внутри.
Таким образом, я склоняюсь к ответу Джорджа, что это внутренний винт Apple.
Edit 2, февраль 1 - Его предупреждение Джим, но не как мы знаем, что
Так что я убедил себя, что это кэширование в классе UIImage, что, очевидно, вызывает вопрос. Что с этим делать? Ну, конечно, напишите мой собственный кеш изображения!
Итак, я начал подключаться к этому коду, который пытался загрузить недопустимые изображения, и получил то место, где я создал имена файлов, которые мне нужны, и передал их в контроллер кеша. Поэтому, чтобы проверить, что все начинает собираться вместе, в контроллере кеша я создал сообщение NSLog для каждой попытки кэширования изображения - не более того - просто зарегистрируйте имя файла.
И угадайте, что - я снова получаю глупое предупреждение. Для того, чтобы вообще не делать никакой реальной работы.
Я могу только сделать вывод, что есть какое-то внутреннее состояние гонки iOS, которое я запускаю, когда я перебираю дополнительный код в метод init из KeyPad
. И я ничего не могу сделать, чтобы смягчить это. Все, что я могу сделать, это надеяться, что это предупреждение будет доброкачественным.
Редактировать 3, Акт Hamlet 1 Сцена 4: Что-то прогнило в Датском королевстве
Сохраняя тот же код, как и в Edit 2, я закомментирована заявление NSLog. И предупреждение ушло. Я вернул его, и появляется предупреждение.
Поэтому код у меня есть:
-(void)loadImages
{
// Iterate over button definitions and cache the required images
for(int i=0; i<numKeys; i++) {
if (![imageCache imageExistsForTag:keyTags[i]]) {
[imageCache addImageFile:[NSString stringWithFormat:@"%s_NP.png",keyNames[i]] forTag:keyTags[i]];
}
if (![imageCache imageExistsForTag:keyTags[i]+pressedOffset]) {
[imageCache addImageFile:[NSString stringWithFormat:@"%s_P.png",keyNames[i]] forTag:keyTags[i]+pressedOffset];
}
}
}
И:
-(void)addImageFile:(NSString*)imageFile forTag:(int)tag
{
NSLog(@"Adding tag:%d for file %@", tag, imageFile);
}
С этой NSLog заявлением контролирующего появлением предупреждения.
Edit 4, февраль 2 - Добро пожаловать в Храм Судьбы
Принимая комментарии Аллена к сердцу я перестроил свою клавиатуру как XIB и загружен, что вместо того, чтобы вручную пытаться создать представление. Конечно, ничего не исправить. Я надеялся, что загрузка Ниба произойдет за пределами того, что когда-либо это вызывает проблему.
Чувство моего чувства заключается в том, что я боюсь против состояния гонки в loadView of Calc и некоторых внутренних операций iOS. Если я сделаю слишком много работы внутри loadView, то перейду строку и откройте предупреждение wait_fences. И что клавиатура является симптомом, а не основной причиной. IE это могла быть любая деятельность, просто работа клавиатуры была последней вещью, которую я сделал до появления предупреждения. Я просто хочу, чтобы я действительно знал, каковы ограничения, что я на самом деле пересекаюсь и не спотыкаюсь в темноте.
Peter, Насколько велики ваши изображения с 26 кнопками? кажется, что загрузка этих изображений превышает лимит 10, поскольку это требует яблоко, вы даже считаете, что поместили весь пользовательский интерфейс в наконечник? – Allen
@Allen .. на данный момент я даже не загружаю изображения. Все, что я делаю, это создание имен изображений и отправка этой информации в NSLog. И я только что проверил тест. С того момента, как я нажал кнопку «Запустить» в XCode, пока не появится предупреждение, это 5 секунд. При запуске с моего 4-го поколения iPod touch приложение запускается менее чем за 2 секунды. –
время вашего времени загрузки с этими изображениями и пересмотреть все эти фиксированные интерфейсы в наконечник. – Allen