UITabBarItem Изображение исчезает при выборе Xcode 6 Beta

Довольно неожиданно для развития, однако бета-версии Xcode дают мне немного головную боль (Xcode 6 beta 5/iOS 8).

Найдены некоторые ответы, но в основном связанные с Xcode 5 и ниже.

Все работает нормально, однако выбранный значок/контроллер просмотра исчезает. В Xcode 5-4 объекты изображения даже не появлялись, предоставляя следующее сообщение об ошибке. Теперь они делают, однако сообщение об ошибке все еще выполняется.

Скриншот:

enter image description here

CUICatalog: Недействительное имя актива: (null) 2014-08-12 15: 16: 26.521 TheApp [5275: 3231837] CUICatalog: Недопустимое имя актива прилагается: (null) 2014-08-12 15: 16: 26.521 TheApp [5275: 3231837] Возможно не загружать изображение "(null)", на которое ссылается нить в комплекте с идентификатор "YourCompnay.TheApp"

Я ломаю голову, пытаясь понять, связаны ли это моими соединениями/изображениями или просто ошибкой Xcode beta.

Задать необходимую помощь и дать четкое объяснение. ELI5.

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

Ответ 1

Я почти в том же месте, что и вы. Как и вы, мои "невыделенные" вкладки будут отображаться хорошо, но для моих выбранных изображений вкладок они не будут присутствовать, и я получаю ошибку "не могу загрузить null image...".

Я назначал изображения внутри раскадровки IB... возможно, это то, что вы делали тоже. В любом случае, внутри IB в Attributes Inspector для UITabBarItem есть два разных поля. Один из них находится в разделе "Элемент панели вкладок", и он называется "Выбранное изображение". Другая часть находится в разделе "Пункт" Бар "и называется" Изображение ". Чтобы быть ясным (повторение моего первого абзаца, но с точки зрения IB), у меня были" правильные "изображения, которые я сохранил в своих .xcassets, назначенных каждому из этих полей Image/Selected_Image (каждое изображение несколько отличалось от другого, чтобы различать выбор). Тот, который у меня был в поле" Изображение", появится, и тот, который у меня был в поле "Выбранное изображение", не будет.

Если я поместил "хороший" из поля "Изображение" в поле "Выбранное изображение", я все равно получил бы ошибку, которая для меня не имела смысла.

ОДНАКО, если я поместил свое "невыбранное" изображение в поле "Элемент" Бар "- > " Изображение "и оставил элемент" Панель табуляции "- > " Выбранное изображение пустым ", ТОГДА одно изображение будет использоваться в обоих местах И было бы выделено синим если выбрано. Это не дало мне незначительного изменения изображения, которое я хотел (так как мой обзор Apple Docs для элемента кнопки бара показал, что у меня должно быть" более толстые линии "на моем изображении для выбранного элемента), он, по крайней мере, дает мне изображение для выбранной вкладки. Надеюсь, это также поможет вам.

Ответ 2

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

Ошибка в том, что поле "выбранное изображение" для элементов панели табуляции в раскадровках просто не работает, и это по-прежнему проблема с Xcode 6.0.1. Я использую изображения, непосредственно включенные в мои ресурсы приложения, а не .xcassets, и я испытываю ту же проблему. Изображения существуют в моем приложении, они появляются в раскрывающемся списке при редактировании моей раскадровки, и все же я получаю ту же ошибку Could not load the "(null)" image ... и пустое выбранное изображение.

Моим решением было добавить это в мой элемент панели вкладок (контроллер просмотра) viewWillAppear:

[[self tabBarItem] setSelectedImage:[UIImage imageNamed:@"(selected image file)"]];

Однако при этом я обнаружил, что размер изображения слегка менялся при выборе/невыбранном изображении, хотя мои изображения были одного размера. Это может быть связано с тем, что размер изображений для элементов панели табуляции предварительно определен каким-то определенным образом, и мы с ними сталкиваемся так же, как их собираемся нарисовать. Это небольшая проблема, но этого было достаточно, чтобы меня укусить, поэтому, чтобы добиться их совершенства, я удалил предыдущий код и добавил его в свой viewWillAppear метод контроллера таблиц :

[(UITabBarItem*)[[[self tabBar] items] objectAtIndex:n] setImage:[UIImage imageNamed:@"(unselected image file)"]];
[(UITabBarItem*)[[[self tabBar] items] objectAtIndex:n] setSelectedImage:[UIImage imageNamed:@"(selected image file)"]];

Где n - индекс элемента панели табуляции. (начиная с 0)

Это некрасиво, но оно работает. Насколько я знаю, поле "выбранное изображение" просто явно не работает в Xcode 6.

Ответ 3

Определение selectedImage в User Defined Runtime. Атрибуты, такие как этот ответ, работали для меня.

Ответ 4

Похоже на ошибку в UIKit, я уже подал радар.

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

  • Определите, какой UITabBarItem принадлежит вашему контроллеру вида.

YourViewController.m:

-(UITabBarItem *)tabBarItem {
  return self.tabBarController.tabBar.items[[self.tabBarController.viewControllers indexOfObject:self.navigationController]];
}

Примечание self.navigationController, вы должны просто self, если нет контроллера режима просмотра, который обертывает ваш обычный контроллер просмотра.

  1. Изменить значки

Функция YourViewController.m -awakeFromNib::

[self.tabBarItem setImage:[UIImage imageNamed:@"RegularImage"]];
[self.tabBarItem setSelectedImage:[UIImage imageNamed:@"SelectedImage"]];

Работает для меня, должен работать и на вас. Это немного взломать, но настолько изящно, насколько это возможно.

Ответ 5

Я видел эту проблему в нескольких версиях XCode. Теперь на 6.3 beta 3 я, наконец, исправил его.

В моем случае я решил это, выполнив две вещи:

  • Для каждого элемента панели вкладок в интерфейсе Builder удалите поле "Выбранное изображение" (это может быть и не нужно).

enter image description here

  1. Щелкните правой кнопкой мыши на раскадровке и выберите "Открыть как → Исходный код". Найдите "tabBarItem". Просмотрите каждый элемент. Они должны выглядеть примерно так:

enter image description here

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

Ответ 6

Нажмите TabButtonItem и перейдите к инспектору атрибутов. Вы увидите 2 раздела: Элемент панели вкладок и пункт "Бар". Вероятно, вы заполнили выбранное поле изображения под элементом "Панель вкладок" и поле "Изображение" под элементом "Бар". Необходимо оставить поле Элемент панели вкладок: выбранное изображение пустым. Он будет работать тогда.

Ответ 7

Для кого-либо другого, страдающего от таких же досадных ошибок: "CUICatalog: недопустимое имя актива: (null) 2014-08-12 15: 16: 26.521 TheApp [5275: 3231837] CUICatalog: Недействительное имя актива: (null) 2014-08-12 15: 16: 26.521 TheApp [5275: 3231837] Не удалось загрузить" (нулевое) "изображение, на которое ссылается нить в комплекте"... Попробуйте выбрать "Изображение" из раздела "Элемент панели" Инспектор атрибутов для установки изображения. Я не совсем уверен, какая разница, но выпадающее меню "Выбранное изображение" раздела "Элемент панели вкладок" вызывает эту ошибку и не работает.

Ответ 8

Здесь решение, это очень хорошо работало для меня.

  • Выберите tabBarItem и установите системный элемент: пользовательский и выбранный. Изображение: пустое в инспекторе атрибутов.
    1. Перейдите в Инспектор удостоверений и удалите путь к ключу, который указывает любое изображение.