TableViewApplication[1458:70b] CUICatalog: Invalid asset name supplied: (null), or invalid scale factor: 2.000000
Obtenir cet avertissement lorsque vous utilisez TableViewController. Comment rectifier cette erreur et quel bloc est affecté?
Celui-ci apparaît quand quelqu'un essaie de mettre nil
dans [UIImage imageNamed:]
Ajouter un point d'arrêt symbolique pour [UIImage imageNamed:]
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.
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];
}
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.
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.
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.
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.
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.
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 !!!!
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.
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.
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;
}
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.