大佬教程收集整理的这篇文章主要介绍了iphone – 使用iOS SDK和完整的Cocoa Touch / Objective-C代码确定用户的设备,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
这很好用,但是platformCode方法是低级的.你知道这种呼叫是否可以用Cocoa Touch代码替换?这是相关的代码:
UIDevice_enhanced.h
@interface UIDevice (Enhanced) typedef enum { kUnkNownPlatform = 0,kiPhone1G,kiPhone3G,kiPhone3GS,kiPhone4,kiPhone4Verizon,kiPhone4S,kiPodTouch1G,kiPodTouch2G,kiPodTouch3G,kiPodTouch4G,kiPad,kiPad2Wifi,kiPad2GSM,kiPad2CMDA,kSimulator } PlatformType; - (NS@R_618_10495@ng *) platformname; - (PlatformTypE) platform; @end
UIDevice_enhanced.m
#import "UIDevice_enhanced.h" #include <sys/utsname.h> @interface UIDevice (Enhanced) - (NS@R_618_10495@ng *) platformCode; @end @implementation UIDevice (Enhanced) // Utility method (privatE) - (NS@R_618_10495@ng*) platformCode { struct utsname systemInfo; uname(&systemInfo); NS@R_618_10495@ng* platform = [NS@R_618_10495@ng @R_618_10495@ngWithC@R_618_10495@ng:systemInfo.machine encoding:NSUTF8@R_618_10495@ngEncoding]; return platform; } // Public method to use - (NS@R_618_10495@ng*) platformname { NS@R_618_10495@ng* platform = [self platformCode]; if ([platform isEqualTo@R_618_10495@ng:@"iPhone1,1"]) return @"iPhone 1G"; if ([platform isEqualTo@R_618_10495@ng:@"iPhone1,2"]) return @"iPhone 3G"; if ([platform isEqualTo@R_618_10495@ng:@"iPhone2,1"]) return @"iPhone 3GS"; if ([platform isEqualTo@R_618_10495@ng:@"iPhone3,1"]) return @"iPhone 4"; if ([platform isEqualTo@R_618_10495@ng:@"iPhone3,2"]) return @"Verizon iPhone 4"; if ([platform isEqualTo@R_618_10495@ng:@"iPhone4,1"]) return @"iPhone 4S"; if ([platform isEqualTo@R_618_10495@ng:@"iPod1,1"]) return @"iPod Touch 1G"; if ([platform isEqualTo@R_618_10495@ng:@"iPod2,1"]) return @"iPod Touch 2G"; if ([platform isEqualTo@R_618_10495@ng:@"iPod3,1"]) return @"iPod Touch 3G"; if ([platform isEqualTo@R_618_10495@ng:@"iPod4,1"]) return @"iPod Touch 4G"; if ([platform isEqualTo@R_618_10495@ng:@"iPad1,1"]) return @"iPad"; if ([platform isEqualTo@R_618_10495@ng:@"iPad2,1"]) return @"iPad 2 (WiFi)"; if ([platform isEqualTo@R_618_10495@ng:@"iPad2,2"]) return @"iPad 2 (GSM)"; if ([platform isEqualTo@R_618_10495@ng:@"iPad2,3"]) return @"iPad 2 (CDMA)"; if ([platform isEqualTo@R_618_10495@ng:@"i386"]) return @"Simulator"; return platform; } // Public method to use - (PlatformTypE) platform { NS@R_618_10495@ng *platform = [self platformCode]; if ([platform isEqualTo@R_618_10495@ng:@"iPhone1,1"]) return kiPhone1G; if ([platform isEqualTo@R_618_10495@ng:@"iPhone1,2"]) return kiPhone3G; if ([platform isEqualTo@R_618_10495@ng:@"iPhone2,1"]) return kiPhone3GS; if ([platform isEqualTo@R_618_10495@ng:@"iPhone3,1"]) return kiPhone4; if ([platform isEqualTo@R_618_10495@ng:@"iPhone3,2"]) return kiPhone4Verizon; if ([platform isEqualTo@R_618_10495@ng:@"iPhone4,1"]) return kiPhone4S; if ([platform isEqualTo@R_618_10495@ng:@"iPod1,1"]) return kiPodTouch1G; if ([platform isEqualTo@R_618_10495@ng:@"iPod2,1"]) return kiPodTouch2G; if ([platform isEqualTo@R_618_10495@ng:@"iPod3,1"]) return kiPodTouch3G; if ([platform isEqualTo@R_618_10495@ng:@"iPod4,1"]) return kiPodTouch4G; if ([platform isEqualTo@R_618_10495@ng:@"iPad1,1"]) return kiPad; if ([platform isEqualTo@R_618_10495@ng:@"iPad2,1"]) return kiPad2Wifi; if ([platform isEqualTo@R_618_10495@ng:@"iPad2,2"]) return kiPad2GSM; if ([platform isEqualTo@R_618_10495@ng:@"iPad2,3"]) return kiPad2CMDA; if ([platform isEqualTo@R_618_10495@ng:@"i386"]) return kSimulator; return kUnkNownPlatform; } @end
// Utility method (privatE) - (NS@R_618_10495@ng *)platformCode { // This may or not be necessary // Im not sure if you can have a device thats not currentDevice can you? // if ([self isEqual:[UIDevice currentDevice]]) { nS@R_618_10495@ng* platform = [[self.systemName copy] autorelease]; return platform; // Could probably shorten to just // return [[self.systemName copy] autorelease]; // or - return [NS@R_618_10495@ng @R_618_10495@ngWith@R_618_10495@ng:self.systemName]; }
这将是utsname机器的Obj-C版本(从这一行:NS@R_618_10495@ng * platform = [NS@R_618_10495@ng @R_618_10495@ngWithC@R_618_10495@ng:systemInfo.machine encoding:NSUTF8@R_618_10495@ngEncoding];).
但是,由于systemName只返回@“iPhone OS”,要获取实际的设备型号,您必须使用c代码.这是另一种方法:
#include <sys/types.h> #include <sys/sysctl.h> - (NS@R_618_10495@ng *)machine { size_t size; // Set 'oldp' parameter to NULL to get the size of the data // returned so we can allocate appropriate amount of space sysctlbyname("hw.machine",NULL,&size,0); // Allocate the space to store name char *name = malloc(sizE); // Get the platform name sysctlbyname("hw.machine",name,0); // Place namE into a @R_618_10495@ng NS@R_618_10495@ng *machine = [NS@R_618_10495@ng @R_618_10495@ngWithC@R_618_10495@ng:name]; // Done with this free(Name); return machine; }
以上是大佬教程为你收集整理的iphone – 使用iOS SDK和完整的Cocoa Touch / Objective-C代码确定用户的设备全部内容,希望文章能够帮你解决iphone – 使用iOS SDK和完整的Cocoa Touch / Objective-C代码确定用户的设备所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。