2012-07-26 84 views
1

我正在爲下面的代碼獲取這些警告。 任何想法如何解決這個問題? 感謝您的幫助。「使用塊時不兼容指向整數轉換的指針」

  • 類型說明符缺少,默認爲「INT」
  • 不相容指針整數轉換初始化「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; 

         }]; 

    } 
+0

您是否在.h文件中聲明瞭「mymoviePlayerController」?我的意思是本地和全球? – 2012-07-26 11:21:35

+0

另外指定你得到第一個和第二個警告的行 – 2012-07-26 11:22:13

+0

「重要的一行是」__block mymoviePlayerController = nil;「這會引發警告 – geforce 2012-07-26 12:16:50

回答

2

首先,你不必將mymoviePlayerController變量設置爲零,如果你以後不使用它。只要不擔心,從超級視圖中刪除控制器的視圖就足夠了。

其次,您不能在塊內使用__block限定符進行變量寫入。您必須修改您的代碼以使變量可寫入塊之外:

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

感謝弗拉基米爾和法比安的幫助,很高興知道,它解決了這個問題,感謝您的快速回復。祝您有愉快的一天。 – geforce 2012-07-26 12:17:57

5

__block用於當你聲明變量,而不是當你將值分配給它。所以編譯器將下面的行作爲變量聲明,這是錯誤的:

__block mymoviePlayerController = nil; 

你應該使用__block屬性時聲明變量:

__block MPMoviePlayerController *mymoviePlayerController = [notification object]; 

附:爲什麼你在這裏使用__block呢?看起來你並不需要它在這種情況下

相關問題