TableViewApplication[1458:70b] CUICatalog: Invalid asset name supplied: (null), or invalid scale factor: 2.000000
Uzyskiwanie tego ostrzeżenia podczas pracy z TableViewController. Jak naprawić ten błąd i którego bloku dotyczy problem?
ios
objective-c
xcode5
manish singh
źródło
źródło
Odpowiedzi:
Ten pojawia się, gdy ktoś próbuje umieścić
nil
w[UIImage imageNamed:]
Dodaj symboliczny punkt przerwania dla
[UIImage imageNamed:]
Dodaj
$arg3 == nil
warunek w symulatorze,$r0 == nil
warunek na 32-bitowym telefonie iPhone lub$x2 == nil
na 64-bitowym telefonie iPhone.Uruchom aplikację i zobacz, gdzie zatrzyma się debugger.
PS Pamiętaj, że dzieje się tak również wtedy, gdy nazwa obrazu jest pustym ciągiem. Możesz to sprawdzić, dodając
[(NSString*)$x2 length] == 0
do warunku.źródło
UIImage imageNamed:
, ale mimo to zapisuję ten punkt przerwania.$arg3
składni warunkowych punktów przerwania. Gdzie mogę dowiedzieć się więcej?error: use of undeclared identifier '$arg3'
. Przegapiłem coś?(int)[$arg3 length] == 0
Ten błąd (zwykle) występuje, gdy próbujesz załadować obraz,
[UIImage imageNamed:myImage]
ale iOS nie jest pewien, czymyImage
to naprawdę jest,NSString
a wtedy masz to ostrzeżenie.Możesz to naprawić za pomocą:
Lub możesz po prostu sprawdzić
length
nazwęUIImage
:źródło
Ponieważ błąd polega na narzekaniu, że nadałeś imię
(null)
, najprawdopodobniej jest to spowodowane dzwonieniem[UIImage imageNamed:nil]
. A dokładniej, przekazywanie zmiennej nie zostało ustawione, więc jest równenil
. Chociaż użyciestringWithFormat:
pozbyłoby się błędu, myślę, że jest duża szansa, że nie robi tego, co chcesz. Jeśli nazwa, którą podasz jestnil
wartością, to użycie stringWithFormat: spowoduje, że będzie szukał obrazu, który jest dosłownie nazwany „(null)”, tak jakbyś wołał[UIImage imageNamed:@"(null)"]
.Coś takiego jest prawdopodobnie lepszą opcją:
Możesz chcieć ustawić punkt przerwania w Xcode w tej linii "Zrób coś innego", aby pomóc ci zrozumieć, dlaczego ten kod jest wywoływany z wartością zerową w pierwszej kolejności.
źródło
W Xcode 6.4 wydaje się, że ma to miejsce podczas używania „Wybranego obrazu” dla elementu paska kart w scenorysie, nawet jeśli jest to prawidłowy obraz.
W rzeczywistości i tak nie wydaje się, aby ustawiał wybrany obraz stanu, więc musi być zdefiniowany w atrybutach czasu wykonywania zdefiniowanych przez użytkownika i usunięty z atrybutu SelectedImage elementu paska kart
źródło
W moim przypadku przekazałem [UIImage imageNamed: @ ""], co spowodowało, że pokazałem ostrzeżenie. Po prostu dodaj punkty przerwania do wszystkich linii, w których użyłeś imageNamed i debuguj wiersz, w którym znajduje się ostrzeżenie.
źródło
[UIImage imageNamed:@""]
. Jak to naprawiłeś?if
do sprawdzenia, czy nazwa obrazu nie jest pustym ciągiem lub przy użyciu domyślnego obrazu „noImage”, w jaki sposób można wyświetlić brak obrazu, gdy nie ma zastosowania żadna odpowiednia nazwa, a zasoby nie zawierają obrazu „noImage”?Zdarzyło mi się to po podzieleniu storyboardu na kilka (faktyczna zmiana nastąpiła, gdy byłem na wakacjach, więc nie wiem dokładnie, jak to zostało zrobione).
Po sprawdzeniu kodu XML scenorysów stwierdziłem, że odwołanie do obrazu, które wcześniej wskazywało na „bottomBar” w katalogu zasobów, wskazywało zamiast tego
imageView:fFo-1g-jzs:image
.Na końcu pliku XML pod
<resources>
tagiem został nazwany znacznik<image name="imageView:fFo-1g-jzs:image">
zawierający dużymutableData
blob.Po zresetowaniu odniesienia do obrazu w scenorysie i usunięciu obiektu blob błąd zniknął.
źródło
Właśnie naprawiłem ten błąd. Po prostu sprawdź użycie
[UIImage imageNamed:(NSString*) imageName]
funkcji. JeśliimageName
taknil
, wystąpi błąd.źródło
Podajesz nieprawidłową nazwę obrazu, więc przed umieszczeniem jej musisz zweryfikować, możesz wykonać dowolny z powyższych sposobów, w zależności od tego, który ma sens dla twojego kodu lub podobnego
Mam nadzieję, że to pomoże !!!!
źródło
Przyczyną błędu jest przekazanie wartości zerowej do metody „imageNamed:”. Aby tego uniknąć, możesz ukryć swój imageView, gdy próbujesz przekazać wartość nil. Szanse mogą wystąpić podczas ponownego użycia imageViews w UITableView lub mogą znajdować się w scrollViews.
Uniknąłem ostrzeżenia, sprawdzając poniżej:
źródło
Otrzymałem to ostrzeżenie, kiedy wczytuję użycie obrazu
[[UIImage imageNamed:normalStr] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]
, potem , zmieniam na[UIImage imageNamed:normalStr]
, ostrzeżenie zniknęło.źródło
Jednym ze sposobów jest zamiana metod klasowych na
[UIImage imageNamed:]
własną implementację, a następnie sprawdzenie nazwy obrazu w implementacji. Zobacz następujące:Jak zamienić metodę klasową na iOS?
Zaimplementowałem to w mojej kategorii UIImage (Debug):
Możesz też chcieć zawirować
[UIImage imageNamed:inBundle:compatibleWithTraitCollection:]
.źródło
Może możesz użyć tego, aby potwierdzić, że „nazwa_obrazu” nie jest „zerem”, a następnie pominiesz to ostrzeżenie.
źródło