1

iPhone SDK 4.0.1 を使用して iPhone アプリケーションを作成しています。アプリケーションには、メディア プレーヤーからの通知に関連する次のコード行があります。

[[NSNotificationCenter defaultCenter]
        addObserver:self
           selector:@selector(moviePreloadDidFinish:)
               name:MPMoviePlayerLoadStateDidChangeNotification
             object:m_player];

アプリをビルドするとき、私は製品を iphone 3.1 にターゲットにしています。そのビルドは問題なく、iPhone 4.0 デバイスでうまく動作しますが、iPhone 3.1.3 OS で実行するとアプリ自体がクラッシュします。次のメッセージが表示されます。

dyld: Symbol not found: _MPMoviePlayerLoadStateDidChangeNotification

参照元: /var/mobile/Applications/8572A1FF-488D-4F97-93DD-C06DBAD23B5B/OrangeDemo.app/OrangeDemo 想定: /System/Library/Frameworks/MediaPlayer.framework/MediaPlayer in /var/mobile/Applications/8572A1FF- 488D-4F97-93DD-C06DBAD23B5B/OrangeDemo.app/OrangeDemo

このエラーを回避するにはどうすればよいですか。

4

1 に答える 1

1

MPMoviePlayerLoadStateDidChangeNotificationiOS 3.1.3 には存在しません。弱いリンクを介してその存在を検出する必要があります。

if (&MPMoviePlayerLoadStateDidChangeNotification != NULL) {
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePreloadDidFinish:) name:MPMoviePlayerLoadStateDidChangeNotification object:m_player];
}

MPMoviePlayerContentPreloadDidFinishNotificationiOS 3.2 より前では、ムービーのプリロードがいつ終了したかを検出するために使用できます。新しい SDK に対してリンクしている場合、そのシンボルは非推奨の警告を生成する場合があります ( MPMoviePlayerLoadStateDidChangeNotification.

シンボル チェックの構文に注意してください。単純にポインターをブール値 (または.) として使用するのではなく、比較する必要があります。コンパイラーとダイナミック ローダーは、これらの形式を検出して適切に処理することができません。それらは検出されます。NULLif (MPMoviePlayerLoadStateDidChangeNotification)if (&MPMoviePlayerLoadStateDidChangeNotification)

于 2010-08-02T10:08:12.133 に答える