2010-10-19 15 views
6

In meiner .m-Datei für eine Klasse mit dem Namen Ad, ich habe 3 statische StringsZiel C - Statische und globale Variable?

static NSString *AdStateDisabled = @"disable"; 
static NSString *AdStateExpired = @"expired"; 
static NSString *AdStateActive = @"active"; 

ich einfach diese statischen Variablen in der aktuellen Klasse verwenden können, aber ich kann sie nicht von einer anderen Klasse aufrufen, gibt es eine Möglichkeit, diese statischen Variablen global zu machen? Also zum Beispiel in meiner Viewcontroller Klasse kann ich sowas machen.

//HomeViewController.m 
if ([self.ad.state isEqual:Ad.AdStateDisabled]) 
{ 
    //do something 
} 

Antwort

16

Sie könnten die folgenden Deklarationen zu Ihrem Header HomeViewController.h hinzufügen, die dann importiert werden müssen, wo Sie auf die Zeichenfolgen zugreifen möchten.

//HomeViewController.h 
extern NSString *AdStateDisabled; 
extern NSString *AdStateExpired; 
extern NSString *AdStateActive; 

Dann ändern Sie Ihre Definitionen, um 'statisch' zu entfernen.

//HomeViewController.m 
NSString *AdStateDisabled = @"disable"; 
NSString *AdStateExpired = @"expired"; 
NSString *AdStateActive = @"active"; 

Wenn Sie nicht möchten, dass ein Benutzer der Saiten importieren müssen HomeViewController.h dann könnten Sie auch festlegen, nur diese Zeichenfolgen in AdState.h und setzen die Definitionen in AdState.m (und entfernen Sie sie aus HomeViewController.m), nach denen Benutzer der Zeichenfolge AdState.h nur importieren müssen, um die Zeichenfolgen zu verwenden.

+0

Hey, ich habe vor einiger Zeit einen Kern erstellt, nicht ARC-kompatibel, aber es kann tatsächlich in ARC verwendet werden, indem man die Assign-Methoden verwendet und starke oder schwache Referenzen angibt. Es ist ein bisschen näher an die ursprüngliche Frage gestellt: https://gist.github.com/darionco/03649feeee57f86fee3f – Dario

8

Zuerst entfernen Sie die statische. Statische Variablen und Funktionen in C und Objective-C bedeuten, dass sie nur für die aktuelle Kompilierungseinheit sichtbar sind (das ist mehr oder weniger: nur die Datei, für die Sie die Statistikvariable deklariert haben, kann sie sehen).

Als nächstes müssen Sie auch die Variablen in einer öffentlichen Header-Datei mit „extern“, wie die von der Klasse mit der Klasse verbunden erklären:

extern NSString *AdStateDisabled; 

Sie sie dann in anderen Dateien verwenden können, als gut, aber Sie würden nicht als "Ad.AdStateDisabled", sondern nur als "AdStateDisabled" zugreifen.

Verwandte Themen