2012-02-03 32 views
5

Tôi đã khai báo một hàm có đầu vào boolean var. Tôi không nhận được lỗi. Tuy nhiên, khi gọi nó từ một bộ điều khiển khác, thông báo xuất hiện: "số nguyên không tương thích để chuyển đổi con trỏ gửi'BOOL 'thành tham số kiểu BOOL". Tôi đang làm gì sai? Cảm ơn.ios boolean var declaration

- (void)composeBar: (BOOL *)savePars 

khỏi tầm nhìn khác:

AppDelegate *localFunction = [[UIApplication sharedApplication] delegate]; 

[localFunction composeBar:YES]; 

Trả lời

9

BOOL* không phải là một boolean. Đó là một con trỏ đến một boolean. Chỉ cần sử dụng

- (void)composeBar:(BOOL)savePars 

Bạn đang có khả năng bị nhầm lẫn bởi vì tất cả đối tượng obj-C được khai báo với *, nhưng đó là bởi vì họ đang thực sự gợi ý. Tuy nhiên, BOOL không phải là một đối tượng, nó thực sự chỉ là char giữ 0 hoặc 1. Cũng giống như bạn sử dụng int cho số nguyên thay vì int* (hoặc trong mã thành ngữ khác, NSInteger), bạn sử dụng BOOL thay vì BOOL*.

4

Điều này là do bạn đã khai báo chức năng như đang lấy con trỏ đến boolean, không phải là boolean. Đây là cách khai báo nên xem xét:

- (void)composeBar: (BOOL)savePars 

* kèm loại id (ví dụ: những người bạn xác định thông qua @interface/@implementation). Thường xuyên loại C, enums, cấu trúc, vv không cần * trong tuyên bố, trừ khi bạn thực sự muốn vượt qua một con trỏ.