2010-09-11 5 views
5

Можно создать дубликат:
iPhone - How do I detect the iPhone version?Как программно обнаружить Iphone 4

Так что я смотрел на эту тему: iPhone - How do I detect the iPhone version?

Но он не отвечает, как искать iphone 4. Кроме того, он выглядит как уродливый код. Может быть, есть более простой способ?

Я также ищу специально для обнаружения iphone 4 в коде. Есть идеи? Спасибо!

+0

Вы можете проверить ссылку здесь http://stackoverflow.com/questions/3177634/iphone-how-do-i-detect-the-iphone-version – Hiren

ответ

9

Не обнаруживайте модели, обнаруживайте возможности.

Например, если вы загружаете изображение из веб-службы, которая предоставляет изображения @ 2x, а также изображения нормального размера, вы знаете, что прямо сейчас это работает только на iPhone4 и iPod Touch 4, но кто скажет что завтра не будет работать на iAmazingMagicThingy? Проверьте работоспособность.

Чтобы использовать приведенный выше пример, способ проверить, что будет:

if([[UIScreen mainScreen] respondsToSelector:@selector(scale)] && 
    [[UIScreen mainScreen] scale] == 2.0) { 
    /* do your thing */ 
} 

Я не собираюсь идти дальше и дальше о том, как проверить возможности, но вы действительно хотите делать это так, а не тестирование для конкретной модели.

+0

пример того, почему это лучше: функциональные возможности будет служить iPhone 4 теперь будет также надлежащим образом перейти к новому iPod touch. –

+0

Потому что способ, которым это делается в этом сообщении, является хрупким и всегда будет игрой для игры. Если вы знаете, какие функции вам нужны, найдите эти функции и проигнорируйте, на каком устройстве они находятся, - подумайте о любом устройстве с ним, способном выполнять этот код. Подумайте об этом: у всех летающих есть крылья, но не все крылатые вещи могут летать. Так ли имеет смысл проверять, есть ли у этой вещи крылья и что они способны поддерживать животное в полете? Или получить список всех птиц, которые, как вы знаете, могут летать и сравнивать с ними? В конце концов, вы можете найти новый вид, и ваш код устарел. – jer

+0

вы, ребята, правы .. но я смотрел на http://www.iphonedevsdk.com/forum/iphone-sdk-development/45032-more-ipad-landscape-launch-issues.html, и они не учитывают iphone 4. Думаю, я должен переосмыслить, как это сделать. может быть, просто пойти со сном (х) хе. – foreyez

11

Я не хочу обсуждать здесь, если лучше определить аппаратную модель или возможности; Я считаю, что лучше всего это зависит от конкретной потребности. Во всяком случае, если вы хотите, чтобы проверить на аппаратной модели, то вы можете использовать следующую UNIX системный вызов:

#include <sys/utsname.h> 

int uname(struct utsname *name); 

Один из членов из struct utsname является machine, оканчивающихся нулем строку, которая идентифицирует аппаратное обеспечение (для информация о других участниках см. мужчина 3 не указано); в случае iPhone 4 это будет «iPhone3,1», для 3GS «iPhone2,1», для 3G «iPhone1,2», для iPod Touch 4-го поколения «iPod4,1», третьего поколения «iPod3,1» »и второе поколение« iPod2,1 ».

struct utsname platform; 
int rc; 

rc = uname(&platform); 
if(rc == -1){ 
/* handle error */ 
} 
else{ 
fprintf(stdout, "hardware platform: %s", platform.machine); 
} 
+0

Плюс 1 для ответа на заданный вопрос. Иногда полезно знать фактическую модель устройства. Например, в моем приложении процессор iPhone 4 работает медленно, поэтому мне нужно настроить некоторые функции MY. – Jeff

Смежные вопросы