web-dev-qa-db-ja.com

CFDictionaryRefをNSDictionaryにキャストしますか?

私はコードを持っています(取り除かれています):

CFDictionaryRef *currentListingRef;
//declare currentListingRef here
NSDictionary *currentListing;
currentListing = (NSDictionary *) currentListingRef;

そして、私はエラーを受け取ります:

ARCでは、非Objective-Cポインター型 'CFDictionaryRef *'(別名 'const struct __CFDictionary **')から 'NSDictionary *'へのキャストは許可されていません

何が悪いのですか? CFDictionaryRefからNSDictionaryに変換するにはどうすればよいですか?

40
johnluttig

ARCは、ブリッジングの動作を変更しました。

NSDictionary *original = [NSDictionary dictionaryWithObject:@"World" forKey:@"Hello"];
CFDictionaryRef dict = (__bridge CFDictionaryRef)original;
NSDictionary *andBack = (__bridge NSDictionary*)dict;
NSLog(@"%@", andBack);
72
Joshua Weinberg

ARCでは、次の方法でこれを行う必要があります。

CFDictionaryRef currentListingRef = ...;
NSDictionary *currentListing = CFBridgingRelease(currentListingRef);

これにより、CFオブジェクトが解放され、オブジェクトの所有権がARCに転送されます。それ以外の場合は、CFオブジェクトを手動で解放する必要があります。

8
Laimis

このコードを試してください、

NSDictionary *ssidList = (__bridge NSDictionary*)myDict;
NSString *SSID = [ssidList valueForKey:@"SSID"];
0
MSA