2012-03-25 6 views

Antwort

5

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); 
    } 
} 
+0

Aber warum funktioniert dann NSRange range1 = {12, 5}; fehlerfrei? –

+0

Weil '{12, 5}' eine Konstante ist. 'NSMakeRange (12, 5)' ist nicht. – yuji

+0

Oh, so schwer zu verstehen, aber danke –

0

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.