respondsToSelector
を実行して、iOS 6 固有の外観メソッドを検出しようとしています[UIBarButtonItem appearance]
。ただし、NO
どのセレクタを指定しても、常に次の結果が返されます。
// Should show NOPE in iOS 5, YEP in iOS 6. Shows NOPE always
NSLog(@"%@", [[UIBarButtonItem appearance] respondsToSelector:@selector(setBackgroundImage:forState:style:barMetrics:)] ? @"YEP" : @"NOPE");
// Should show YEP in both iOS 5 and iOS 6. Shows NOPE always
NSLog(@"%@", [[UIBarButtonItem appearance] respondsToSelector:@selector(setBackgroundImage:forState:barMetrics:)] ? @"YEP" : @"NOPE");
実際にこれらのメソッドを使用すると、それぞれのバージョンの iOS で問題なく動作しますが、どのメソッドが使用可能かを検出できないようです。 では、どうすれば適切に実行できるのでしょうか?
ベストアンサー1
外観プロキシをチェックしないでください。これはプロキシなので、決して頼ることはできません。代わりに、新しいメソッドを持つアイテム、この場合は を直接チェックしますUIBarButtonItem
。
BOOL hasNewMethod = [UIBarButtonItem instancesRespondToSelector:@selector(setBackgroundImage:forState:style:barMetrics:)];
if( hasNewMethod )
NSLog(@"Running iOS 6 with new method");
else
NSLog(@"Current OS doesn't support method...");