HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了iphone – 使用iOS SDK和完整的Cocoa Touch / Objective-C代码确定用户的设备大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我根据不同的来源编写了以下UIDevice类别.我已经升级了platformCode方法,所以它的低级别低于可见度.

这很好用,但是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

解决方法

这可能被视为一种“客观-c”方式:

// 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];).

utsname

UIDevice Class Reference

但是,由于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,请注明来意。