1

我在下面的代码中收到这些警告。任何想法如何解决这个问题?谢谢你的帮助。

  • 缺少类型说明符,默认为 'int'
  • 指向使用 'void *' 类型的表达式初始化 'int' 的整数转换的不兼容指针;
  • 未使用的变量“mymoviePlayerController”

重要的线是"__block mymoviePlayerController = nil;

- (void) moviePlaybackCompleteLightBox:(NSNotification*) notification {

        MPMoviePlayerController *mymoviePlayerController = [notification object];  
        [[NSNotificationCenter defaultCenter] removeObserver:self  
                                                        name:MPMoviePlayerPlaybackDidFinishNotification  
                                                      object:mymoviePlayerController]; 


        // movie fadein transition ====================
        self.moviePlayerController.view.alpha = 1;

        [UIView animateWithDuration:0.3f delay:0.0 options:UIViewAnimationCurveEaseOut
                         animations:^{
                             self.moviePlayerController.view.alpha = 0;   
                         }
                         completion:^(BOOL finished) { 
                             [mymoviePlayerController stop];
                             [mymoviePlayerController.view removeFromSuperview];
                             __block mymoviePlayerController = nil;

                         }];

    }
4

2 回答 2

5

__block声明变量时使用,而不是在为其赋值时使用。所以编译器把下面这行当做变量声明,这是错误的:

 __block mymoviePlayerController = nil; 

声明变量时应使用 __block 属性:

__block MPMoviePlayerController *mymoviePlayerController = [notification object];

PS你为什么在这里使用__block?在这种情况下看起来你不需要它

于 2012-07-26T11:25:32.307 回答
2

首先,如果您之后不使用它,您不必将mymoviePlayerController变量设置为 nil。不用担心,从其父视图中删除控制器的视图就足够了。

其次,您不能使用__block块内的限定符使变量可写。您必须修改代码以使变量在块外可写:

__block MPMoviePlayerController *blockMoviePlayerController = mymoviePlayerController;
[UIView animate...animations:...complection:^(BOOL finished) {
    blockMoviePlayerController = nil; // or something else
}];
于 2012-07-26T11:29:19.203 回答