1

これが私のコードです:

- (void)peripheralManager:(CBPeripheralManager *)peripheralManager central:(CBCentral *)central didSubscribeToCharacteristic:(CBCharacteristic *)characteristic
{
    [self.centralManager retrievePeripherals:@[central.UUID]];
}

エラーが発生します:

Collection element of type 'CFUUIDRef' (aka 'const struct __CFUUID *') is not an Objective-C object

私は何をしますか?

4

3 に答える 3

3

問題:

コンパイラは型についてのみ認識し、実行時の動作については認識しません。ほとんどCFUUIDRefの場合、通常の Objective-C オブジェクトと同じように使用できることを認識していません (ただし、公式には無料のブリッジされた Foundation クラスの対応物はありません)。それconst struct __CFUUIDが Objective-C クラスではないことを確認するだけで、救済されます。

ソリューション:

I.これでうまくいくと思います-試してみたところ、実際に動作し、CFUUIDを使用して印刷すると素晴らしい説明さえありNSLog().ます。id次のように にキャストするだけです。

@[(__bridge id)central.UUID]

Ⅱ.はい、それを文字列に変換することはできますが、それによってコンパイラ エラーが解消されることはありません。コンパイラは互換性のない型について癖があるため、その型キャストが必要です。

CFStringRef uuidString = CFUUIDCreateString(kCFAllocatorDefault,@[central.UUID]);
NSString *uuidNSString = (__bridge NSString *)uuidString;

これで動作が保証されました。

于 2013-07-18T16:07:05.850 に答える