使用块时“与整数转换不兼容”

时间:2012-07-26 11:20:08

标签: iphone objective-c ios objective-c-blocks

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

  • 缺少类型说明符,默认为'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;

                         }];

    }

2 个答案:

答案 0 :(得分:5)

声明变量时使用

__block,而不是在为其赋值时使用。因此编译器将以下行视为变量声明,这是错误的:

 __block mymoviePlayerController = nil; 

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

__block MPMoviePlayerController *mymoviePlayerController = [notification object];

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

答案 1 :(得分:2)

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

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

__block MPMoviePlayerController *blockMoviePlayerController = mymoviePlayerController;
[UIView animate...animations:...complection:^(BOOL finished) {
    blockMoviePlayerController = nil; // or something else
}];