2011-04-30 27 views
3

我将在MPMediaPlayerController上寻找时间线。无法使用MPMoviePlayerController寻找

我尝试用MPMediaPlayerController的未记录方法setCurrentTime,如下所示。

[player setCurrentTime:1.f]; 

然后苹果crashs有如下...

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[MPMoviePlayerController setCurrentTime:]: unrecognized selector sent to instance 0x5619fe0' 
*** Call stack at first throw: 
(
    0 CoreFoundation      0x00f59be9 __exceptionPreprocess + 185 
    1 libobjc.A.dylib      0x010ae5c2 objc_exception_throw + 47 
    2 CoreFoundation      0x00f5b6fb -[NSObject(NSObject) doesNotRecognizeSelector:] + 187 
    3 CoreFoundation      0x00ecb366 ___forwarding___ + 966 
    4 CoreFoundation      0x00ecaf22 _CF_forwarding_prep_0 + 50 
    5 MPlayerExample      0x0000227d -[MPlayerExampleViewController PauseVideo] + 69 
    6 Foundation       0x000367f6 __NSFireDelayedPerform + 441 
    7 CoreFoundation      0x00f3afe3 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 19 
    8 CoreFoundation      0x00f3c594 __CFRunLoopDoTimer + 1220 
    9 CoreFoundation      0x00e98cc9 __CFRunLoopRun + 1817 
    10 CoreFoundation      0x00e98240 CFRunLoopRunSpecific + 208 
    11 CoreFoundation      0x00e98161 CFRunLoopRunInMode + 97 
    12 GraphicsServices     0x0188e268 GSEventRunModal + 217 
    13 GraphicsServices     0x0188e32d GSEventRun + 115 
    14 UIKit        0x002c642e UIApplicationMain + 1160 
    15 MPlayerExample      0x00001fe4 main + 102 
    16 MPlayerExample      0x00001f75 start + 53 
) 
terminate called after throwing an instance of 'NSException' 
+0

寻求MPMoviePlayer视频工作代码是你积极的,将其更改为'[播放器setCurrentTime:1.0];'会有同样的错误? – 2011-04-30 13:19:18

+1

苹果是否会崩溃?!? – 2011-04-30 13:43:13

+0

首先,我试过了。参数类型是双倍的。你是对的。但苹果崩溃。 – 2011-05-01 06:14:40

回答

11

您可以使用currentPlaybackTime属性查找MPMoviePlayerController,该属性记录在MPMediaPlayback Protocol Reference中。

所以,你的代码看起来像:

[player setCurrentPlaybackTime:1.0]; 
1

这是一个未公开的API ...它不能保证工作。事实上,你不应该指望它。苹果完全有可能从操作系统更新中删除它,现在该方法不存在。

如果很重要,那么你会传递一个浮点数,并且我认为它需要一个double。这可能是你遇到问题的原因。但是,如果您正在编写应用程序以便在应用程序商店进行分发,则无需进一步调查 - 您的应用程序将被拒绝。 Apple在提交后会自动静态分析代码,任何非公开API的使用都会导致您的应用直接返回给您。

+0

你的信件意味着苹果不允许使用非公开API。我首先听到那个声音。我在哪里可以看到有关该文件的文件? – 2011-05-01 06:24:19

+0

如果你真的不相信我(并且真的,你为什么会认为*苹果会让非公开的API通过?),那么请阅读:https://developer.apple.com/appstore/resources/approval/ guidelines.html - 特别是第2.5节,“使用非公开API的应用程序将被拒绝” – lxt 2011-05-01 20:34:03

1

这里是将使用自定义的滑块

//create slider 

slider1 = [[UISlider alloc] initWithFrame:CGRectMake(85, 435, 150,30)]; 
    [slider1 addTarget:self action:@selector(sliderAction:) forControlEvents:UIControlEventValueChanged]; 
    [slider1 setBackgroundColor:[UIColor clearColor]]; 
    slider1.minimumValue = 0; 
    slider1.continuous = YES; 

    [self.view addSubview:slider1]; 

// Set slider max value as moviePlayerController Total Duration and Current (Set Value) as slider Value 

-(void)sliderAction:(id)sender 
{ 
    UISlider *slider = (UISlider*)sender; 
    float value = slider.value; 

    slider.maximumValue = self.moviePlayerController.duration; 

    self.moviePlayerController.currentPlaybackTime = value; 


}