我必须在具有基本 SDK 7.0 的项目中阅读 iOS 设备的 udid(我知道我不应该这样做,但我需要阅读它并且这identifierForVendor
不是一个选项)。我只能在 iOS 6 设备上这样做,但uniqueIdentifier
由于基础 SDK,该方法无法识别。由于我不知道如何在编译时确定 iOS 版本,所以我做了以下操作:
#define SYSTEM_IS_IOS_7 ([[[UIDevice currentDevice] systemVersion] compare:@"7.0" options:NSNumericSearch] != NSOrderedAscending)
...
if (!SYSTEM_IS_IOS_7) {
SEL selector = NSSelectorFromString(@"uniqueIdentifier");
if ([[UIDevice currentDevice] respondsToSelector:selector]) {
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:
[[[UIDevice currentDevice] class] instanceMethodSignatureForSelector:selector]];
[invocation setSelector:selector];
[invocation setTarget:[UIDevice currentDevice]];
[invocation invoke];
NSString *udid = nil;
[invocation getReturnValue:&udid];
NSLog(@"%@", udid);
}
}
我在 iOS 6.1 上运行代码, udid 出现在控制台上,但应用程序在 之后立即崩溃,EXC_BAD_ACCESS
控制台main.m
上没有任何消息。知道为什么以及如何解决这个问题吗?