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 に答える