iphone - 在Iphone 3.1上运行sdk 4.0.1

时间:2010-08-02 10:01:59

标签: iphone mpmovieplayer

我正在使用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操作系统上运行时,应用程序本身就会崩溃。它给出了以下信息:

dyld: Symbol not found: _MPMoviePlayerLoadStateDidChangeNotification

引用自:/var/mobile/Applications/8572A1FF-488D-4F97-93DD-C06DBAD23B5B/OrangeDemo.app/OrangeDemo   预期在:/System/Library/Frameworks/MediaPlayer.framework/MediaPlayer  在/var/mobile/Applications/8572A1FF-488D-4F97-93DD-C06DBAD23B5B/OrangeDemo.app/OrangeDemo

如何避免此错误。

1 个答案:

答案 0 :(得分:1)

iOS 3.1.3上不存在

MPMoviePlayerLoadStateDidChangeNotification。您需要通过弱链接检测其存在:

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

在iOS 3.2之前,您可以使用MPMoviePlayerContentPreloadDidFinishNotification来检测影片何时完成预加载。如果您要链接到较新的SDK,那么该符号可能会生成弃用警告(如果您使用的是MPMoviePlayerLoadStateDidChangeNotification,则会出现这种情况。)

请注意符号检查的语法:必须NULL进行比较,而不是简单地将指针用作布尔值(即if (MPMoviePlayerLoadStateDidChangeNotification)if (&MPMoviePlayerLoadStateDidChangeNotification)。 )编译器和动态加载器无法检测并正确处理这些表单,如果检测到它们将在3.1.3上崩溃。