2016-02-17 96 views
0

如果應用程序在前臺收到通知,並試圖顯示使用Toast的橫幅。在顯示遠程通知期間應用程序崩潰

簡單的情況下工作正常,沒有出現任何問題..

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { 
    UIView *parentView = [UIApplication sharedApplication].keyWindow.rootViewController.view; 
    [parentView makeToast:@"toast"]; 
} 

但是當我試圖表明我自己的自定義視圖,我上showToast方法不好EXC_BAD_ACCESS錯誤:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { 
    UIView *bannerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.topController.view.frame.size.width, 80)]; 
    UIView *parentView = [UIApplication sharedApplication].keyWindow.rootViewController.view; 
    bannerView.backgroundColor = [UIColor redColor]; 
    [parentView showToast: bannerView duration:3.0 position:CSToastPositionTop completion:nil]; 
} 

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo方法是編程這種類型的行爲的危險地點?有一個強烈的參考parentView似乎並沒有工作,我怎樣才能確定哪個對象越來越過分?

+1

當你調用'showToast'時,是否有'parentView' nil?順便說一句,你爲什麼試圖獲得'rootViewController'?你不應該得到當前可見的控制器嗎? – Alex

+0

我不認爲父視圖是零,第一個例子也會失敗,對吧?我的根視圖是一個導航控制器,所以我認爲它的安全? –

+0

'makeToast'工作而不是'showToast'在哪裏得到不好的訪問? – Alex

回答

0

您可以直接在appdelegate窗口(該窗口位於所有視圖的頂層)上直接顯示烤麪包,而不是獲取目前可見的父視圖。

-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo 
{ 


    if (application.applicationState == UIApplicationStateActive) 
    { 
     [self.window makeToast:@"This is a piece of toast."]; 
    } 
} 
+0

也試過這個..同樣的錯誤.. –

+0

可能window當時是零..你可以通過斷點檢查它。 – Max

相關問題