Помилка: CUICatalog: Неправильне ім'я активу надано: (нульове значення) або недійсний коефіцієнт масштабу: 2.000000


120
TableViewApplication[1458:70b] CUICatalog: Invalid asset name supplied: (null), or invalid scale factor: 2.000000

Знімок екрана додано

Отримання цього попередження під час роботи з TableViewController. Як виправити цю помилку і який блок впливає?


Чи можете ви опублікувати якийсь код?
Патрік Хофман

2
Це попередження також з’являється, якщо ім'я зображення порожнє рядок
onmyway133

Відповіді:


242

Це один з'являється , коли хто - то намагається поставити nilв[UIImage imageNamed:]

Додати символічну точку розриву для [UIImage imageNamed:]Приклад символічної точки розриву

Додайте $arg3 == nilумову на Simulator, $r0 == nilумову на 32-бітному iPhone або $x2 == nilна 64-розрядному iPhone.

Запустіть програму і подивіться, де відладчик зупиниться.

PS Майте на увазі, це також відбувається, якщо ім'я зображення порожнє рядок. Ви можете перевірити це, додавши [(NSString*)$x2 length] == 0до умови.


7
Це розумний підхід. Схоже, моє зображення нуля знаходиться десь у моїй ниці, тому воно не проходить UIImage imageNamed:, але я все-таки зберігаю цю точку розриву.
cbowns

9
Я не знав про $arg3синтаксис умовних точок перерви. Де я можу дізнатися більше?
Зев Айзенберг

3
Не впевнений, щоб зрозуміти, чому це не працює для мене, завжди повертаючись error: use of undeclared identifier '$arg3'. Я щось пропустив?
Бен

5
я продовжую отримувати: Зупинено через помилку при оцінці умови точки перерви 23.1: "$ r0 == нуль" Не вдалося проаналізувати умовне вираження: помилка: використання незадекларованого ідентифікатора "$ r0" помилка: 1 помилка розбору помилок
Pranoy C

8
У моєму випадку рядок імені зображення був порожнім, тому перевірка довжини arg3 працювала на мене. (int)[$arg3 length] == 0
Метью Корпораал

62

Ця помилка (як правило) трапляється, коли ви намагаєтеся завантажити зображення, [UIImage imageNamed:myImage]але iOS не впевнений, чи myImageдійсно це, NSStringі тоді у вас є це попередження.

Ви можете виправити це за допомогою:

[UIImage imageNamed:[NSString stringWithFormat:@"%@", myImage]]

Або ви можете просто перевірити lengthім'я UIImage:

if (myImage && [myImage length]) {

    [UIImage imageNamed:myImage];
}

1
У випадку, якщо хтось зробив ту саму помилку, що і я, я намагався оновити фонове зображення UIButton для видалення (зовсім не зображення), і тому я змінив своє ім'я UIImage з рядка на просто "", що спричинило помилку. Видаливши весь UIImage (названий: "") і замінивши його нулем, помилка зникла.
Дейв Г

@DaveG Ви, врятували мене години. Дякую за коментар!
Джефф

22

Оскільки помилка скаржиться на те (null), що дане ім’я є , це, швидше за все, викликано дзвінками [UIImage imageNamed:nil]. Або, конкретніше, передача змінної не встановлена, тому вона дорівнює nil. Хоча використання stringWithFormat:дозволить позбутися помилки, я думаю, що є хороший шанс, що насправді це не те, що ви хочете. Якщо ім'я, яке ви надаєте, є nilзначенням, то використання stringWithFormat: призведе до того, що воно шукає зображення, яке буквально називається "(null)", як ніби ви дзвонили [UIImage imageNamed:@"(null)"].

Щось подібне, мабуть, кращий варіант:

if (name) {
    UIImage *image = [UIImage imageNamed:name];
} else {
    // Do something else
}

Ви можете встановити точку перерви в Xcode на тій лінії "Зробіть щось інше", щоб допомогти вам зрозуміти, чому цей код викликається в першу чергу зі значенням нуля.


1
У мене виникла та ж проблема, і помилка полягала в тому, що ім'я зображення було нульовим, як каже robotspacer.
дієгомен

17

У Xcode 6.4 це, мабуть, трапляється при використанні "Вибраного зображення" для елемента рядка вкладки на дошці даних, навіть якщо це дійсне зображення.

введіть тут опис зображення

Насправді це, по суті, не встановлює вибране зображення стану, тому його потрібно визначити у визначених користувачем атрибутах виконання та вилучити з атрибута SelectedImage елемента панелі вкладок.

введіть тут опис зображення


1
Дякую тобі за це! Ці повідомлення про помилки / попередження зводили мене з глузду! Я не можу зрозуміти, чому Apple не позбавляється від панелі вкладок «Вибране зображення» в IB та не виправить це, щоб воно працювало правильно.
wcochran

4

У моєму випадку я проходив [UIImage imageNamed: @ ""], що змусило мене показати попередження. Просто додайте точки переривання до всіх рядків, де ви використовували imageNamed, і налагоджуйте рядок, де ви знайдете попередження.


Я також використовую [UIImage imageNamed:@""]. Як ви це виправили?
Julfikar

[aButton setImage: nil forState: UIControlStateNormal]
Hahnemann

Окрім використання ifтесту для того, що ім'я зображення не є порожнім рядком, або використання зображення за замовчуванням "noImage", як ви не відображаєте зображення, якщо не застосовується відповідне ім'я, а в активах немає зображення "noImage"?
пішов

2

Це сталося зі мною після того, як розкадровлю розділили на кілька (фактична зміна сталася, коли я був у відпустку, тому я не знаю, як саме це було зроблено).

Оглянувши XML дощовиків, я виявив, що замість цього вказується посилання на зображення, яке раніше вказувало на "bottomBar" у каталозі активів imageView:fFo-1g-jzs:image.

В кінці файлу XML під <resources>тегом був тег, названий, <image name="imageView:fFo-1g-jzs:image">що містить велику mutableDataкрапку.

Після скидання посилання на зображення на аркуші та вилучення крапки помилка усунулася.


Це вирішило це для мене, якийсь час шукав цю проблему, це мене заганяло. Щіпка точки розриву не працювала для мене.
Моше Готліб

Тут же проблема, але точка розриву допомогла мені знайти xib, на якому він знаходився. Назва зображення було Ідентичне зображення в ІБ.
Джош Бернфельд

1

Я щойно виправив цю помилку. Просто перевірте використання [UIImage imageNamed:(NSString*) imageName]функції. Якщо imageNameце так nil, то виникає помилка.


1

Ви вводите недійсне ім’я зображення, тому перед його введенням потрібно перевірити його, ви можете зробити будь-який із перерахованих вище способів, залежно від того, який сенс має ваш код чи подібні

if (iconImageName && [iconImageName length])
{

    [UIImage imageNamed:iconImageName];
}
else
{
     iconImageName.hidden = YES;
}

Сподіваюся, це допоможе !!!!


0

Причина помилки передає нульове значення методу "imageNamed:". Щоб уникнути цього, ви можете приховати imageView, коли намагаєтесь передати нульове значення. Ці шанси можуть виникнути при повторному використанні imageViews в UITableView або можуть бути у scrollViews.

Я уникнув попередження нижче:

UIImageView *your_image_view;
NSString *imageName;
if(imageName && imageName.length){
 your_image_view.hidden = NO;
 your_image_view.image = [UIImage imageNamed:imageName];
}
else {
 your_image_view.hidden = YES;
}

0

Я отримав це попередження, коли завантажую зображення [[UIImage imageNamed:normalStr] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal], ніж, я змінюю [UIImage imageNamed:normalStr], попередження не було.


0

Один із підходів полягає в тому, щоб метод класу шиплячи замінити [UIImage imageNamed:]власною реалізацією, а потім перевірити ім'я зображення у вашій реалізації. Дивіться наступне:

Як перенести метод класу на iOS?

Я реалізував це в моїй категорії UIImage (налагодження):

+ (UIImage *)db_imageNamed:(NSString *)imageName {
    if ([imageName length] == 0) {
        NSLog(@"breakpoint here");
    }
    return [self db_imageNamed:imageName];  // not a recursive call here after swizzling
}

Можливо, ви захочете також промайнути [UIImage imageNamed:inBundle:compatibleWithTraitCollection:].


-1

Можливо, ви можете використовувати це для підтвердження, що "imageName" не є "нульовим"; тоді ви залишите це попередження.

 if (imageName) {
    self.imageView.image = [UIImage imageNamed:imageName];
 }
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.