Ошибка: CUICatalog: недопустимое имя актива: (null) или неверный масштабный коэффициент: 2.000000

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

Получение этого предупреждения при работе с TableViewController. Как исправить эту ошибку и какой блок затронут?

Ответ 1

Этот появляется, когда кто-то пытается положить nil в конце концов в [UIImage imageNamed:]

Добавить символическую точку останова для [UIImage imageNamed:] Symbolic breakpoint example

Добавить условие $arg3 == nil (на Simulator) или $r0 == nil на устройстве iPhone
Запустите приложение и посмотрите, где проблема сохраняется.

ПРИБЫЛЬ

Ответ 2

Эта ошибка (обычно) возникает, когда вы пытаетесь загрузить изображение с помощью [UIImage imageNamed:myImage], но iOS не уверен, что myImage действительно является NSString, и тогда у вас есть это предупреждение.

Вы можете исправить это, используя:

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

Или вы можете просто проверить для length имя UIImage:

if (myImage && [myImage length]) {

    [UIImage imageNamed:myImage];
}

Ответ 3

Так как ошибка жалуется, что имя, которое вы дали, это (null), это, скорее всего, вызвано вызовом [UIImage imageNamed:nil]. Или, более конкретно, передача переменной не была установлена, поэтому она равна nil. Хотя использование stringWithFormat: избавит вас от ошибки, я думаю, что есть хороший шанс, что он фактически не делает то, что вы хотите. Если указанное вами имя является значением nil, то использование stringWithFormat: приведет к поиску изображения, которое буквально называется "(null)", как если бы вы звонили [UIImage imageNamed:@"(null)"].

Что-то вроде этого, вероятно, лучший вариант:

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

Возможно, вы захотите установить точку останова в Xcode на строке "Сделать что-то еще", чтобы помочь вам понять, почему этот код получает вызов с нулевым значением в первую очередь.

Ответ 4

В Xcode 6.4 это происходит при использовании "Selected Image" для элемента панели вкладок в раскадровке, даже если это допустимое изображение.

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

На самом деле это не похоже на выбранное изображение состояния в любом случае, поэтому его необходимо определить в пользовательских атрибутах времени выполнения и удалить из атрибута SelectedImage элемента панели вкладок

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

Ответ 5

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

Ответ 6

Я только что исправил эту ошибку. Просто проверьте использование функции [UIImage imageNamed:(NSString*) imageName]. Если imageName - nil, тогда возникает ошибка.

Ответ 7

Причиной ошибки является передача значения nil методу imageNamed:. Чтобы этого избежать, вы можете скрыть свой imageView при попытке передать значение nil. Вероятность может возникнуть при повторном использовании 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;
}

Ответ 8

Я получил это предупреждение при загрузке образа [[UIImage imageNamed:normalStr] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal], чем, я перехожу на [UIImage imageNamed:normalStr], предупреждение не прошло.

Ответ 9

Один из подходов - это метод класса swizzling, чтобы заменить [UIImage imageNamed:] на вашу собственную реализацию, а затем проверить имя изображения в вашей реализации. См. Следующее:

Как подменить метод класса в iOS?

Я реализовал это в своей категории UIImage (Debug):

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

Возможно, вы захотите также swizzle [UIImage imageNamed:inBundle:compatibleWithTraitCollection:].

Ответ 10

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

if (iconImageName && [iconImageName length])
{

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

Надеюсь, это поможет!!!!

Ответ 11

Может быть, вы можете использовать это, чтобы подтвердить, что "imageName" не является "нолем", а затем вы оставите это предупреждение.

 if (imageName) {
    self.imageView.image = [UIImage imageNamed:imageName];
 }