2009-08-27 39 views
12

Tôi có giá trị BOOL bên trong định nghĩa @interface trong tệp .h của tôi. Đây là dưới đây. Nó có cùng một vấn đề cho dù đó là một con trỏ hay không.lỗi: thuộc tính 'myBoolVariableName' có thuộc tính 'giữ lại' phải thuộc loại đối tượng

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

Khi tôi biên dịch, tôi nhận được "lỗi: bất động sản 'myBoolVariableName' với 'giữ' thuộc tính phải có loại đối tượng" trên dòng cho việc nhập khẩu của file .h của tôi.

Tôi tìm thấy trang này ở đây về một số nguyên/NSNumber:

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

Vì vậy, có vẻ như tôi không thể sử dụng các giá trị BOOL bên trong một định nghĩa @ interface. Tôi có thể sử dụng cái gì?

Tôi nên làm gì cho giá trị BOOL/boolean?

Trả lời

33

Tôi đoán rằng sau này trong giao diện của bạn, bạn có một cái gì đó như thế này:

@property (retain) BOOL *myBoolVariableName; 

Điều đó có nghĩa làm cho một tài sản người là giá trị là một con trỏ đến một BOOL, và sử dụng giữ lại ngữ nghĩa.

Vấn đề của bạn là BOOL * là một con trỏ tới một byte bộ nhớ, không phải là con trỏ tới một đối tượng. Và giữ lại là một cái gì đó chỉ áp dụng cho các đối tượng.

Dưới đây là cách bạn có thể tạo thuộc tính BOOL.

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

@property myBoolVariableName; 

@end 

Sự khác biệt quan trọng là biến được khai báo là "BOOL" chứ không phải "BOOL *" và thuộc tính không có (giữ lại).

+4

Tôi phải làm như thế này, nhưng nếu không bạn đã chết ở bên phải. :) Cảm ơn bạn. @property BOOL myBoolVariableName; – Neo42

+0

Điều này cũng sẽ áp dụng cho Số nguyên –

1

Tôi đã gặp phải tình huống tương tự. Tôi đã giải quyết nó như,

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

Tôi tham khảo một câu trả lời của Jon Hess nhưng tôi gặp một lỗi trong đó. Tên loại yêu cầu trình chỉ định hoặc vòng loại. Phiên bản trước của tôi giống như,

@property myBoolVariableName; 

Vì vậy, tôi đã thêm BOOL và giải quyết vấn đề.

Các vấn đề liên quan