Seit dem Update auf Xcode 5.1 kann ich mein Projekt nicht mehr archivieren. Xcode sagt immer "Mehrere Methoden namens" count "gefunden mit nicht übereinstimmenden Ergebnis, Parametertyp oder Attribute. Dieses Problem ist neu und Simulator und läuft auf dem Gerät funktioniert gut. Hier ist der Code:
%Vor% Xcode zeigt den Fehler an diesem Punkt an: [JSON[@"data"][@"menu"][i][@"item"] count]
JSON
ist ein NSDictionary
.
Was ist daran falsch?
Fragen Sie sich: Was ist der Typ von JSON [@ "Daten"] [@ "Menü"] [i] [@ "Element"]? Es ist "id". Der Compiler weiß nicht, auf welche Methode dieses Objekt reagiert. Sie senden eine "Anzahl" Nachricht. Der Compiler durchläuft alle Zählmethoden aller ihm bekannten Klassen. Wenn es mehr als zwei verschiedene gibt, muss es sich beschweren.
Sie könnten
schreiben %Vor%Besser lesbar, einfacher zu verfolgen, schneller und einfacher zu debuggen.
Natürlich können Sie auch
schreiben %Vor% Da mehrere Cocoa-Klassen mit einer Methode namens count
und objectForKeyedSubscript:
(zu der JSON[@"data"][@"menu"][i][@"item"]
aufgelöst wird) id
zurückgibt, kann der Compiler nicht die Typchecking für die Nachricht send durchführen .
Um die Warnung zu stoppen, müssen Sie das Ergebnis von JSON[@"data"][@"menu"][i][@"item"]
auf seine tatsächliche Klasse, z. B. (NSDictionary *)(JSON[@"data"][@"menu"][i][@"item"])
, umwandeln oder es in eine temporäre Variable einfügen: NSDictionary * itemDict = JSON[@"data"][@"menu"][i][@"item"];
Nur eine Besetzung wie:
float a = [[_myArray objectForKey:@"myKey"] count] / 5.0;
float a = [(NSArray *)[_myArray objectForKey:@"myKey"] count] / 5.0;
Tags und Links objective-c cocoa-touch compiler-warnings