Ich habe diesen Fehler beim Aufrufen der NSMakeRange-Methode. Was mache ich falsch?Xcode semantisches Problem "Initialisierungselement ist keine Kompilierzeitkonstante"
Antwort
Wenn Sie eine Variable außerhalb einer Funktion oder Methode initialisieren, können Sie nur konstante Werte verwenden: Sie können keinen Code ausführen. Hier ist das Problem, dass Sie versuchen, NSMakeRange
auszuführen. (Siehe die Antworten auf this question, die ähnlich ist).
Die Lösung besteht darin, range1
zu deklarieren, ihm jedoch keinen Wert zuzuweisen und dann eine +initialize
-Methode zu implementieren, die den Wert festlegt. initialize
ist eine Klassenmethode, die aufgerufen wird, bevor andere Methoden in Ihrer Klasse aufgerufen werden.
+ (void)initialize {
if (range1 == NULL) {
range1 = NSMakeRange(12, 5);
}
}
initializer-element-is-not-a-compile-time-constant
Fehler werfen, wenn Sie versuchen, eine Variable innerhalb @implementation und aus der Seite zu initialisieren alle Verfahren. Sie können Variablen vor @implementation deklarieren, so dass sie von allen Methoden aufgerufen werden können. Und Sie können Variable innerhalb einer Methode deklarieren, so dass sie innerhalb dieser Methode sichtbar sein kann.
Aber warum funktioniert dann
NSRange range1 = {12, 5};
fehlerfrei? –Weil '{12, 5}' eine Konstante ist. 'NSMakeRange (12, 5)' ist nicht. – yuji
Oh, so schwer zu verstehen, aber danke –