web-dev-qa-db-fra.com

Erreur: CUICatalog: Nom d'actif incorrect fourni: (null) ou facteur d'échelle invalide: 2.000000

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

Screenshot added

Obtenir cet avertissement lorsque vous utilisez TableViewController. Comment rectifier cette erreur et quel bloc est affecté?

103
manish singh

Celui-ci apparaît quand quelqu'un essaie de mettre nil dans [UIImage imageNamed:]

Ajouter un point d'arrêt symbolique pour [UIImage imageNamed:]Symbolic breakpoint example

Ajoutez la condition $arg3 == nil Sur le simulateur, la condition $r0 == nil Sur l'iPhone 32 bits ou $x2 == nil Sur l'iPhone 64 bits.

Exécutez votre application et voyez où le débogueur s'arrêtera.

P.S. Gardez à l'esprit que cela se produit également si le nom de l'image est une chaîne vide. Vous pouvez le vérifier en ajoutant [(NSString*)$x2 length] == 0 à la condition.

198
tt.Kilew

Cette erreur se produit (généralement) lorsque vous essayez de charger une image avec [UIImage imageNamed:myImage] mais iOS ne sait pas si myImage est vraiment un NSString et vous avez alors cet avertissement.

Vous pouvez résoudre ce problème en utilisant:

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

Ou vous pouvez simplement rechercher le length du nom du UIImage:

if (myImage && [myImage length]) {

    [UIImage imageNamed:myImage];
}
58
Fabio

Puisque l'erreur consiste à se plaindre que le nom que vous avez donné est (null), Cela est probablement dû à l'appel de [UIImage imageNamed:nil]. Ou plus précisément, le passage d'une variable n'a pas été défini, il est donc égal à nil. Bien que l'utilisation de stringWithFormat: Élimine l'erreur, je pense qu'il y a de bonnes chances que ce ne soit pas ce que vous voulez réellement. Si le nom que vous fournissez est une valeur nil, alors, en utilisant stringWithFormat:, vous obtiendrez une image littéralement nommée "(null)", comme si vous appeliez [UIImage imageNamed:@"(null)"].

Quelque chose comme ceci est probablement une meilleure option:

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

Vous voudrez peut-être définir un point d'arrêt dans Xcode sur la ligne "Faire autre chose" pour vous aider à comprendre pourquoi ce code est appelé avec une valeur nulle en premier lieu.

21
robotspacer

Dans Xcode 6.4, cela semble se produire lors de l'utilisation de "Image sélectionnée" pour un élément de la barre d'onglets du storyboard, même s'il s'agit d'une image valide.

enter image description here

Cela ne semble de toute façon pas définir l'image d'état sélectionnée. Elle doit donc être définie dans les attributs d'exécution définis par l'utilisateur et supprimée de l'attribut SelectedImage de l'élément de barre de tabulation.

enter image description here

17
ginchly

Dans mon cas, je passais [UIImage imageNamed: @ ""], ce qui m'a amené à afficher l'avertissement. Ajoutez simplement des points d'arrêt à toutes les lignes où vous avez utilisé imageNamed et déboguez la ligne où vous trouvez l'avertissement.

3
Rahul Mathur

C'est ce qui m'est arrivé après la division d'un storyboard en plusieurs (le changement a eu lieu quand j'étais en vacances, alors je ne sais pas exactement comment cela s'est passé).

Après avoir inspecté le XML des storyboards, j’ai trouvé qu’une référence d’image qui désignait auparavant "bottomBar" dans le catalogue des ressources désignait plutôt imageView:fFo-1g-jzs:image.

À la fin du fichier XML sous la balise <resources> Se trouvait la balise nommée <image name="imageView:fFo-1g-jzs:image"> Contenant un gros blob mutableData.

Après avoir réinitialisé la référence à l'image dans le storyboard et supprimé le blob, l'erreur a disparu.

2
idrougge

Vous fournissez un nom d’image non valide; vous devez donc valider avant de le mettre. Vous pouvez utiliser l’une des méthodes ci-dessus, quelle que soit la solution choisie pour votre code ou autre.

if (iconImageName && [iconImageName length])
{

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

J'espère que ça va aider !!!!

1
Aks

J'ai eu cet avertissement quand je charge l'image use [[UIImage imageNamed:normalStr] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal], que, je change en [UIImage imageNamed:normalStr], l'avertissement était parti.

0
Meilbn

Une approche consiste à utiliser la méthode de classe swizzling pour remplacer [UIImage imageNamed:] avec votre propre implémentation, puis vérifiez le nom de l'image dans votre implémentation. Voir ce qui suit:

Comment balancer une méthode de classe sur iOS?

Je l'ai implémenté dans ma catégorie 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
}

Vous voudrez peut-être balayer [UIImage imageNamed:inBundle:compatibleWithTraitCollection:] ainsi que.

0
Haoxin Li

La raison de l'erreur passe une valeur nil à la méthode "imageNamed:". Pour éviter cela, vous pouvez masquer votre imageView lorsque vous essayez de passer la valeur nil. Des risques peuvent survenir lors de la réutilisation de imageViews dans UITableView ou dans scrollViews.

J'ai évité l'avertissement avec la vérification ci-dessous:

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
Bharath

Je viens de corriger cette erreur. Il suffit de vérifier l’utilisation de la fonction [UIImage imageNamed:(NSString*) imageName]. Si le imageName est nil, alors une erreur se produit.

0
passwind