我正在为下面的代码收到这些警告。 任何想法如何解决? 谢谢你的帮助。
重要的一行是"__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;
}];
}
答案 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
}];