UImagePickerController выдает предупреждение, из-за которого перестает работать категория UIView Layout

#ios #ios4 #xcode4 #uiimagepickercontroller

#iOS #ios4 #xcode4 #uiimagepickercontroller

Вопрос:

У меня есть приложение, в котором я использую UIImagePickerController, и после того, как я закрываю его, либо делая снимок, либо используя кнопку отмены, некоторые пользовательские UIView начинают исчезать. Причина, по которой они исчезают, заключается в том, что их ширина или высота становятся равными 0. Я могу возиться с приложением (довольно большим, с панелью вкладок 4 и отдельными контроллерами модального представления), и все в порядке, пока не попытаюсь сделать снимок. Когда я пытаюсь открыть ImagePicker, я получаю это предупреждение:

предупреждение: Пытался удалить несуществующую библиотеку: /Developer/Platforms/iPhoneOS.platform/DeviceSupport/4.3.1 (8G4)/Symbols/System/Library/Frameworks/IOKit.framework/IOKit

Только что кое-что обнаружил. Возможно, причина исчезновения представлений заключается в том, что категория UIView Layout, которую я использую, перестает работать после этого предупреждения. Эта категория в основном помогает мне задать ширину / высоту для вида, подобного:

  • (void) setWidth: (двойное)значение { CGRect frame = [self frame]; frame.size.width = round(значение); [self setFrame:frame]; }

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

Ответ №1:

У меня такое же предупреждение, как и у вас, но вместо этого приложение вылетает.
Причина в том, что у меня есть категория UIView, в которой есть метод:

(UIView *) Первый ответчик;

когда я меняю имя этого метода на

(UIView *)Первый ответчик;

проблема исчезла.

Я думаю, нам не следует называть методы в нашей категории аналогично именам встроенных методов этого класса.

Возможно, вы захотите изменить имя вашего метода на что-то вроде этого:

   (void)changeWidth:(double)value   
{   
   CGRect frame = [self frame];   
   frame.size.width = round(value);   
   [self setFrame:frame];  
}
  

Комментарии:

1. setWidth: не является методом в UIView, поэтому перезапись не требуется.