Ich versuche, den folgenden Code in meiner benutzerdefinierten Ansicht zu verwenden Tile. m :
%Vor% Leider bekomme ich dadurch einen Kompilierfehler Initialisierungselement ist keine Kompilierzeitkonstante und ich muss das static
Schlüsselwort entfernen, um meine App in Xcode kompilieren zu lassen (hier Vollbild ):
Ich denke, ich initialisiere die NSDictionary
korrekt - indem ich die neuen Objective-C-Literale verwende Syntax.
Aber warum kann ich static
hier nicht benutzen?
Ich dachte, es wäre hier angebracht, sicherzustellen, dass meine Konstante letterValues
nur einmal gesetzt ist?
Sie können eine statische Variable nur während der Initialisierung mit einer Konstante setzen. @ {} erzeugt ein Objekt, also keine Konstante.
Tun Sie dies stattdessen:
%Vor%Einige andere Antworten deuten hier auf eine Überprüfung auf null statt auf einmal hin, aber das kann Probleme verursachen, wenn mehrere Kacheln gleichzeitig (über Threads) erstellt werden. dispatch_once implementiert die erforderliche Sperre.
Sie können statisch verwenden, aber die Zuweisung kann nicht in derselben Zeile erfolgen. Versuchen Sie Folgendes:
%Vor% Der Grund dafür ist, dass die @{<key> : <value>}
-Syntax vom Compiler in eine Objective-C-Methode ( [[NSPlaceholderDictionary alloc] initWithObjects:forKeys:count:]
) übersetzt wird, die zur Kompilierungszeit nicht aufgelöst werden kann.
NSDictionary
-Objekte können nicht zur Kompilierzeit erstellt werden. Wenn Sie jedoch ein statisches Objekt benötigen, können Sie eines erstellen. Sie können zum Beispiel die Methode initialize
wie folgt verwenden:
Die if-Anweisung verhindert mehrere Aufrufe Ihres Codes in MyClass
subclasses.
Tags und Links const objective-c ios static nsdictionary