2009-08-27 5 views
12

Ich habe einen BOOL-Wert innerhalb meiner @ Interface-Definition in meiner .h-Datei. Hier ist es unten. Es hat das gleiche Problem, ob es ein Zeiger ist oder nicht.Fehler: Eigenschaft 'myBoolVariableName' mit Attribut 'Retain' muss vom Objekttyp sein

@interface myCustomViewController : UIViewController <UIWebViewDelegate> { 
{ 
//...more iboutlets defined above 
BOOL *myBoolVariableName; 
} 

Wenn ich kompilieren, erhalte ich „Fehler: Eigenschaft‚myBoolVariableName‘mit‚behalten‘Attribut des Objekttyps sein muss“ auf der Linie für den Import von meiner .h-Datei.

fand ich diese Seite hier um einen integer/NSNumber:

http://discussions.apple.com/thread.jspa?threadID=1846927

Also, es scheint, dass ich nicht BOOL Werte innerhalb einer @interface Definition verwenden kann. Was kann ich stattdessen verwenden?

Was soll ich für BOOL/boolsche Werte tun?

Antwort

33

ich, dass später in Ihrem Schnittstelle erraten haben Sie so etwas wie diese:

@property (retain) BOOL *myBoolVariableName; 

Das bedeutet eine Eigenschaft machen, den Wert ist ein Zeiger auf eine BOOL ist, und verwendet Semantik beibehalten.

Ihr Problem ist, dass BOOL * ist ein Zeiger auf ein Byte des Speichers, kein Zeiger auf ein Objekt. Und behalten ist etwas, das nur für Objekte gilt.

So können Sie eine BOOL-Eigenschaft erstellen.

@interface myCustomViewController : UIViewController <UIWebViewDelegate> { 
    BOOL myBoolVariableName; 
} 

@property myBoolVariableName; 

@end 

Die wichtigen Unterschiede sind, dass die Variable als „BOOL“ deklariert wird, nicht „BOOL *“ und die Eigenschaft haben, nicht (behalten).

+4

Ich musste es so machen, aber ansonsten bist du genau richtig. :) Danke. @property BOOL myBoolVariableName; – Neo42

+0

Dies gilt auch für Ganzzahlen –

1

Ich habe ähnliche Situation konfrontiert. Ich löste es wie,

@interface myCustomViewController : UIViewController { 
BOOL myBoolVariableName; 
} 
@property BOOL myBoolVariableName; 
@end 

Ich beziehe eine Antwort von Jon Hess, aber ich habe einen Fehler drin. Der Typname erfordert einen Spezifizierer oder Qualifier. Meine frühere Version war wie,

@property myBoolVariableName; 

So habe ich BOOL und das Problem gelöst.

Verwandte Themen