2013-09-25 32 views
11

Tôi đang đấu tranh để biên dịch một ứng dụng iPad để sử dụng trên iOS 6 và iOS 7.Biên dịch ứng dụng hoạt động trong iOS 6 và iOS 7

Dưới đây là thông điệp mà tôi tiếp tục nhận được:

Property 'barTintColor' not found on object of type 'UITabBar *'; did you mean 'tintColor'? 

Base SDK cho mục tiêu được đặt thành Latest iOS (iOS 7.0)iOS Deployment TargetiOS 6.0. Tôi đã làm sạch trong dự án.

Xcode Target Settings

Đây là mã:

Trong file .h:

@property (nonatomic, strong) IBOutlet UITabBar *tabbedBar; 

Trong tập tin .m:

if ([tabbedBar respondsToSelector: @selector(barTintColor)]) { 
    tabbedBar.barTintColor = [UIColor blackColor]; 
} 

Tôi đang soạn thảo chống lại SDK iOS 7, vì vậy nó nên biết về barTintColor. Bất kỳ ý tưởng những gì vấn đề có thể được?

Cập nhật:

Được rồi, tôi đang tiến bộ, nhưng không hoàn toàn hiểu tại sao.

Xem ảnh chụp màn hình Xcode này. Lưu ý hai mục nhập cho iPad 3 của tôi trong lựa chọn Active Scheme. Sự khác biệt là gì? Nếu tôi chọn tùy chọn hàng đầu, tôi sẽ gặp lỗi. Nếu tôi chọn tùy chọn phía dưới, nó hoạt động.

Xcode device selection

bất cứ ai có thể giải thích lý do tại sao cùng một thiết bị xuất hiện hai lần trong danh sách này, và tại sao nó hoạt động khi tôi chọn một và không phải là khác? FYI, thiết bị đã cài đặt iOS 6.

+0

Đó có phải là lỗi thời gian chạy hoặc biên dịch không? Bạn có thể thử '@selector (setBarTintColor:)'? –

+0

bạn đã thử bộ chọnBarTintColor:? Như trong [tabbedBar setBarTintColor: [UIColor blackColor]]; – CSmith

+0

Xin lỗi, Xcode cũng không biết về 'setBarTintColor'. Xem ảnh chụp màn hình này [link] (http://i.imgur.com/kN0Qu7N.png) – Axeva

Trả lời

15

Bạn có hai SDK được cài đặt trong Xcode: cho iOS 6 và iOS 7. Bây giờ, khi điều đó xảy ra, nếu bạn cắm thiết bị iOS 7, nó sẽ hiển thị dưới dạng hai thiết bị (tức là tùy chọn) trong công cụ chọn thiết bị: trước tiên hàng dành cho iPad 3 (iOS 6), thứ hai cho iPad 3 (iOS 7).

Vấn đề với lỗi của bạn là khi bạn chọn iPad 3 (iOS 6), Xcode vẫn đọc thiết bị như iOS 7 (và đó là những gì nó đã cài đặt), khi xây dựng nó vượt qua mã [tabbedBar respondsToSelector: @selector(barTintColor)] (nó phản hồi với bộ chọn, vì đây là iOS 7), nhưng vì bạn đang xây dựng cho iOS 6, đồng thời nó cũng gây ra lỗi, vì hey, iOS 6 không có phương pháp đó! Vui vẻ.

Về cơ bản, bạn không thể sử dụng tùy chọn iOS 6 khi thử nghiệm trên thiết bị iOS 7. Bạn cần thiết bị iOS 6 hoặc bạn bị mắc kẹt với trình mô phỏng để thử nghiệm các phiên bản cũ.

EDIT: Bạn có thể kiểm tra những gì tôi đang nói theo cách sau đây - thay vì sử dụng respondsToSelector: sử dụng

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0f) { 
    // code 
} 

và sau đó chọn thiết bị đầu tiên trong danh sách (iPad 3 iOS 6). Bạn sẽ thấy rằng bạn đi qua mệnh đề if, nhưng Xcode cho bạn lỗi rằng bộ chọn không khả dụng trên iOS 6.

+0

Tôi không chắc chắn. Không nên tạo một nhị phân bất kể thiết bị có iOS 6 hoặc iOS 7 không? Khi bạn gửi đến App Store hoặc cho Phân phối doanh nghiệp, bạn chỉ tạo một phiên bản. Không phải một cho mỗi SDK. – Axeva

+0

Có, nhưng tôi đang nói chỉ để chạy trên iPad. Khi bạn lưu trữ ứng dụng, nó hoạt động tốt trên cả iOS 6 và 7. Bạn có thể thử tạo bản lưu trữ và phân phối thông qua TestFlight/HockeyApp và bạn sẽ không gặp sự cố. –

+2

Vì vậy, Xcode biên dịch các phiên bản SDK cụ thể khi thử nghiệm, không phải các tệp nhị phân phổ thông? – Axeva

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