0

ベース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_ACCESSmain.m、コンソールにメッセージは表示されません。これを解決する理由と方法はありますか?

4

0 に答える 0