3

xcode4.2 で ios5.0 プログラミングを学習するための簡単なプロジェクトを作成したいと考えています。これは元のコードです:

NSString *path = [[NSBundle mainBundle] pathForResource:@"win" ofType:@"wav"];
NSURL* url = [NSURL fileURLWithPath:path];

AudioServicesCreateSystemSoundID( ( CFURLRef)url, &winSoundID);

コンパイル エラー:

file://localhost/Users/Hikari/Documents/Projects/Pickers/Pickers/CustomPickerViewController.m: エラー: 自動参照カウントの問題: Objective-C ポインターの 'CFURLRef' (別名 'const struct __CFURL *') へのキャスト自動参照カウントでは、Objective-C 以外のポインターは許可されません

だから私はグーグルでそれを検索しました.何人かの友人はそれを解決するためにマクロ '__bridge'を追加する必要があると言いますが、それはうまくいきません.

コード:

AudioServicesCreateSystemSoundID( ( __bridge CFURLRef)url, &winSoundID);

エラー:

file://localhost/Users/Hikari/Documents/Projects/Pickers/Pickers/CustomPickerViewController.m: エラー: セマンティックの問題: 宣言されていない識別子 '__bridge' の使用

自動参照カウントが有効です! この問題を解決する方法???

4

3 に答える 3

1

プロジェクト設定を試して、「自動参照」と入力し、Objective-C自動参照カウントをNOに設定し、無効にして再コンパイルすると、警告メッセージが表示されますが、コンパイルおよび実行されます。

于 2011-09-28T05:35:55.663 に答える
1

objc_unretainedPointer 答えはそれです。コード:

NSString *path = [[NSBundle mainBundle] pathForResource:@"win" ofType:@"wav"];
NSURL* url = [NSURL fileURLWithPath:path];

AudioServicesCreateSystemSoundID( (CFURLRef)objc_unretainedPointer(url), &winSoundID);

path = [[NSBundle mainBundle] pathForResource:@"crunch" ofType:@"wav"];
AudioServicesCreateSystemSoundID((CFURLRef)objc_unretainedPointer([NSURL fileURLWithPath:path]), &crunchSoundID);

それは正常に動作します。

ps: コードの編集を手伝ってくれた Macmade に感謝します。

于 2011-09-17T13:42:33.787 に答える
0

そのファイルを常にARCでコンパイルしていますか?これは、ファイルがARCを有効にして1回コンパイルすると最初のエラーが発生し、2回目はARCを無効にしてコンパイルすると、最初のエラーを修正すると2番目のエラーが発生するように見えます。

于 2011-09-16T16:19:32.260 に答える