Ich möchte, dass diese Methode prüft, ob eine Bedingung wahr ist, und setze eine bestimmte Schaltfläche (Schaltfläche), um die von mir angegebenen Bilder zu erhalten. Hier ist der Code.
%Vor%Hier ist der Fehler, den ich bekomme.
%Vor% Sie rufen [UIImage imageNamed:@""]
oder [UIImage imageNamed:nil]
auf. Kein Bild entspricht der leeren Zeichenfolge. Wenn Sie versuchen, das Bild zu löschen, übergeben Sie nil
anstelle von imageNamed:
.
Probieren Sie dies aus (aktualisierter Originalcode mit dem Kommentar von @Kyle Fang):
%Vor%Eine bessere Möglichkeit, Breakpoints zu verwenden, um den bestimmten Aufruf zu finden, der + [UIImage imagenamed:] zur Erzeugung des Fehlers verursacht, ist die Verwendung eines symbolischen Breakpoints.
Öffnen Sie den Breakpoint Navigator und klicken Sie auf den "+" Button links unten. Wählen Sie "Symbolischen Haltepunkt hinzufügen ...". Bearbeiten Sie dann den Haltepunkt, um diese Einstellungen zu haben:
Symbol: + [UIImake imageNamed:] Bedingung: $ r2 == nil
Die Bedingung testet das Register r2, das auf das Argument der imageNamed: -Methode verweist, für ein nicht wertvolles Argument der Methode. Sie könnten die Bedingung auch auf (BOOL) [(NSString *) $ r2 isEqualToString: @ ""] setzen, wenn Sie sehen wollten, ob eine leere Zeichenfolge als Argument verwendet wurde. Beachten Sie, dass das Register r2 nur bei Debugging auf einem Gerät vorhanden ist. Der Simulator verwendet ein anders benanntes Register, da es auf der x86-Architektur ausgeführt wird.
Wenn die Bedingungen erfüllt sind, unterbricht der Debugger den Assembler-Code der UIKit-Bibliothek, aber Sie können die Ursprungsquelle des Aufrufs im Stack-Trace des Threads finden.
Sie benötigen nur diesen einzelnen Haltepunkt, um Ihre gesamte Codebasis nach der Quelle des Aufrufs zu durchsuchen.
Ich habe den gleichen Fehler "CUICatalog: Ungültiger Objektname geliefert:, oder ungültiger Skalierungsfaktor: 2.000000" nach der Verwendung des Asset-Katalogs, neu in Xcode 5.
Nach einigem Debugging entdeckte ich, dass das, was diesen Fehler verursachte, ein Argument von "nil" oder eine leere Zeichenfolge @ "" an die Klassenmethode [UIImage imageNamed:] übergab. Selbst das Übergeben eines Dateinamens, der nicht im Paket vorhanden war, hat diesen Fehler nicht ausgelöst.
Also stimme ich mit bneely überein (daher habe ich meine Stimme bekommen) für die Lösung. Nun, wenn Sie das getan haben, was bneely vorgeschlagen hat und immer noch den Fehler bekommt, stellen Sie sicher, dass Sie Ihren Code durchgehen und vielleicht einen Haltepunkt dort platzieren, wo Sie ihn anrufen [UIImage imageNamed:] und sehen, ob Sie eine Null oder eine leere Zeichenfolge übergeben Argument.
FYI, um einen Haltepunkt zu erstellen, klicken Sie einfach auf den linken Rand des Code-Editors und fügen Sie den blauen Haltepunkt hinzu. Klicken Sie dann mit der rechten Maustaste auf den Haltepunkt und wählen Sie "Breakpoint bearbeiten" aus dem erscheinenden Menü. Dann im Feld "Bedingung" etwas wie folgt eingeben:
(! imageFileName || [Bilddateiname isEqualToString: @ ""])
Dabei steht imageFileName für die Zeichenfolge, die die Bilddatei darstellt, die Sie laden möchten.
Ich habe festgestellt, dass die Ursache dieses Problems für mich darin bestand, dass das Array, von dem ich die Daten aus dem Bild erhielt, als weak, nonatomic
markiert und unter mir gelöscht wurde.
Das Festlegen des Datenquellenarrays als nonatomic, retain
behob dieses schwer zu fassende Problem.
1) Fügen Sie Symbolic BreakPoint hinzu, nachdem Sie die Plus-Taste gedrückt haben. 2) füge diese boolesche Zeile hinzu, um nach einer leeren Zeichenfolge zu suchen 3) Dies wurde automatisch hinzugefügt (nicht sicher nach dem Build oder nicht), also habe ich bearbeitet, um Bedingung hinzuzufügen
Hoffe, das könnte ein kleines Extra helfen, mich eingeschlossen.
Lies das nur, wenn du IB oder Storyboards verwendest!
Ich hatte dieses Problem, nachdem ich das Bild für UIImageView im Storyboard gesetzt und dann den Bildnamen im Asset-Katalog geändert hatte. ImageView im Storyboard war immer noch mit diesem Bild, obwohl im Attribut-Inspektor für die Bildansicht das Bildfeld "Unbekanntes Bild" hieß. Alles hat gut funktioniert, weil ich später Image-Code eingerichtet habe, abgesehen von lästigem Log.
Ugh, sieht aus wie Übergebrauch von Wort "Bild", hoffe, es hilft jemandem.
Tags und Links objective-c iphone ios cocoa-touch uibutton