8

Xcode 4.3 không cảnh báo về các phương thức chưa khai báo khi chúng tồn tại trong @implementation hiện tại, đây là một tính năng mới tuyệt vời. Tuy nhiên, điều này gây ra sự cố trong một số trường hợp nhất định khi sử dụng dự án của tôi trên Xcode 4.2.Làm cho Xcode 4.3 cảnh báo về các phương thức không khai báo tồn tại trong @implementation

Làm cách nào để kích hoạt lại cảnh báo cho các phương pháp chưa khai báo?

Ví dụ:

@interface MashTun : NSObject 
- (void)foo; 
@end 

@implementation MashTun 
- (void)foo { 
    CGRect rect = [self smallRect]; 
    NSLog(@"My Small Rect: %@", NSStringFromCGRect(rect)); 
} 

- (CGRect)smallRect { 
    return CGRectMake(0, 0, 100, 100); 
} 
@end 

Trong Xcode 4.2, điều này không:

warning: instance method '-smallRect' not found (return type defaults to 'id') 
error: initializing 'CGRect' (aka 'struct CGRect') with an expression of incompatible type 'id' 

tôi hoàn toàn hiểu được cảnh báo và lỗi trong Xcode 4.2 vì nó không cho phép việc tìm kiếm các phương pháp trong hiện tại @implementation phạm vi. (Sửa chữa rất đơn giản: hoặc đặt phương thức smallRect phía trên phương pháp foo hoặc khai báo phương thức smallRect trong danh mục hoặc tiêu đề.)

Nhưng làm cách nào để bật cảnh báo trong Xcode 4.3 để phát hiện lỗi này trước khi vượt qua nó cho đồng nghiệp chạy 4.2?

+1

Tôi chưa cài đặt 4.3 nhưng vẫn có tùy chọn trong 'Cài đặt bản dựng' cho' Bộ chọn không khai báo '? điều này có ảnh hưởng gì không? –

+0

Bạn sẽ nghĩ như vậy theo tên - nhưng đó là đề cập đến bằng cách sử dụng @selector (foo) và cho dù nó kiểm tra cho một phương pháp hiện có theo tên đó. –

+0

Vâng, đây là một bước tiến tuyệt vời trong 4.3 và đồng thời một chút rắc rối. Nó đốt cháy tôi thường xuyên. Tin tốt là nó sẽ không quá lâu trước khi vấn đề biến mất cùng với mọi người nâng cấp (và cuối cùng chúng ta có thể ngừng phương thức khai báo trước một cách không cần thiết). –

Trả lời

0

Trình biên dịch LLVM 3.1 mới không quan tâm đến điều này. Nó không quan trọng nếu bạn đặt phương thức trên/dưới hoặc cho dù có một nguyên mẫu. Vì vậy, nếu tất cả các đồng nghiệp của bạn có Xcode của họ cập nhật ít nhất là 4,3. Điều này thực sự không phải là một vấn đề.

Tùy chọn khác là tạo cảnh báo của riêng bạn bằng cách sử dụng mã bên dưới. Bạn lạnh thông báo cho họ về vấn đề này, và vấn đề ở bàn tay. Đây có thể là một cách dễ dàng để truyền tải thông điệp.

#warning "warning message" 

Hy vọng điều này sẽ hữu ích.

+0

Cảm ơn, tôi biết rằng LLVM 3.1 không cảnh báo về những điều này và các đồng nghiệp của tôi có thể nâng cấp. Điều này hiện không thể thực hiện được. Điều tôi muốn là thấy những cảnh báo này cho bản thân mình trước khi giao dự án cho họ. Tạo một lỗi bằng tay sẽ giả định rằng tôi có thể thấy các cảnh báo trong 4.3 - Tôi không thể. Có cài đặt trình biên dịch để hoàn nguyên về hành vi cũ không? –

+0

Bạn có thể đi qua tất cả các cảnh báo, mà tôi có và không có đó là lý do tại sao tôi đề nghị ở trên. – Vikings

+0

Phản hồi trước tôi đề cập bạn có thể đi qua tất cả các thiết lập cảnh báo trình biên dịch và không có một lá cờ cho điều đó. Vì vậy, điều này là không thể, hoặc hạ xuống Xcode 4.2 hoặc chắc chắn rằng tất cả các mã bạn viết, cho mỗi phương pháp tùy chỉnh có một nguyên mẫu, đó là thực hành tốt anyway. – Vikings

0

Tôi không biết Nếu tôi có thể có một bản dựng hài hước nhưng trình biên dịch LLVM 3.1 của tôi không có Cờ chọn không khai báo theo Cảnh báo biên dịch. Hiện đang chạy 4.3.2. LLVM 4.0 không có nó mặc dù.

+0

công cụ chọn không khai báo là tuyệt vời! Nhưng không chính xác những gì tôi đang nói đến. Những gì không khai báo chọn làm là đảm bảo khi bạn làm một @selector (foo :) rằng bộ chọn là hợp lệ (tại thời gian biên dịch). Nó bị tắt vì bạn có khả năng có một bộ chọn động khi chạy. –

+0

Rất tiếc, không bao giờ hiểu sai câu hỏi của bạn. Bỏ qua câu trả lời –

0

một tùy chọn trong quá trình chuyển đổi như vậy sẽ là biên dịch chéo với một trình biên dịch/phiên bản khác. gcc-llvm là một lựa chọn phổ biến, được cài đặt sẵn. cách tiếp cận khác sẽ là cài đặt nhiều phiên bản của xcode và xây dựng bằng cách sử dụng toolchain đó.

+0

có và Xcodes dựa trên ứng dụng giúp việc này trở nên dễ dàng ngay bây giờ. Trong trường hợp này, giải pháp là nâng cấp máy chủ xây dựng của chúng tôi lên Lion và chỉ sử dụng 4.3 trên tất cả các trạm. Không phải là giải pháp tôi đang tìm kiếm (cờ cảnh báo trình biên dịch) nhưng nó đã làm việc cuối cùng. –