Apple khuyến nghị sử dụng đoạn mã sau để phát hiện xem chạy trên một chiếc iPad hoặc iPhone/iPod Touch:Làm sao người ta có được UI_USER_INTERFACE_IDIOM() để làm việc với hệ điều hành iPhone SDK <3.2
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
// The device is an iPad running iPhone 3.2 or later.
// [for example, load appropriate iPad nib file]
}
else {
// The device is an iPhone or iPod touch.
// [for example, load appropriate iPhone nib file]
}
Vấn đề là UI_USER_INTERFACE_IDIOM () và UIUserInterfaceIdiomPad KHÔNG được định nghĩa trong SDK trước 3.2. Điều này dường như hoàn toàn đánh bại mục đích của một chức năng như vậy. Chúng chỉ có thể được biên dịch và chạy trên hệ điều hành iPhone 3.2 (hệ điều hành iPhone 3.2 chỉ có thể chạy trên iPad). Vì vậy, nếu bạn có thể sử dụng UI_USER_INTERFACE_IDIOM(), kết quả sẽ luôn là để chỉ ra một iPad.
Nếu bạn bao gồm mã này và nhắm mục tiêu hệ điều hành 3.1.3 (hệ điều hành iPhone/iPod Touch gần đây nhất) để kiểm tra mã ứng dụng chung trên iPhone, bạn sẽ gặp lỗi trình biên dịch vì các ký hiệu không được xác định trong 3.1 .3 hoặc trước đó, khi biên dịch cho giả lập iPhone 3.1.3.
Nếu đây là phương pháp được khuyến nghị bởi Apple để phát hiện thiết bị thời gian chạy, tôi đang làm gì sai? Có ai đã sử dụng phương pháp này để phát hiện thiết bị không?
Đó là nếu bạn muốn biên dịch cho 3.0. Bạn nên, như drootang nói, biên dịch cho 3.2 và chạy nó trên một thiết bị 3.0, bởi vì 3.2 là những gì bạn gửi cho AppStore. – conradev
Tôi đồng ý, nhưng không có cách nào để kiểm tra trong Trình mô phỏng iPHONE (như trái ngược với iPad) trong khi xây dựng cho 3.2. Nếu bạn muốn thử nghiệm trên cả hai sim, bạn phải làm loại thủ thuật này. –