我正在使用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
如何避免此错误。
答案 0 :(得分:1)
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上崩溃。