2012-10-16 50 views
0

我更改我的UIWindow的rootViewControler後出現以下錯誤。更改後的錯誤rootviewcontroller + [NSNotificationCenter dictationViewClass]

2012-10-16 15:12:35.653 repdocApp[22898:c07] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[NSNotificationCenter dictationViewClass]: unrecognized selector sent to class 0x1d63914' 

奇怪的是,它只發生在我的代碼中有一行永遠不會被執行的時候。

-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    AppDelegate *app = (AppDelegate *) [[UIApplication sharedApplication] delegate]; 
    OverviewModel *model = [self.dataArray objectAtIndex:indexPath.row]; 

if (model.modelType == ModelTypeCatalog) 
{ 
    NSLog(@"HERE"); 
    if (app.window.rootViewController == app.catalogViewController) 
    { 
     return; 
    } 
    // with this return no error but this branch is never executed 
    // return; 
    [UIView transitionFromView:app.window.rootViewController.view 
         toView:app.catalogViewController.view 
         duration:0.45f 
         options:UIViewAnimationOptionTransitionCrossDissolve 
        completion:^(BOOL finished){ 
         app.window.rootViewController = app.catalogViewController; 
        }]; 
} 
else 
{ 
    if (app.window.rootViewController == app.catalogViewController) 
    { 
     [app.navigationPopoverController dismissPopoverAnimated:NO]; 
     [UIView transitionFromView:app.window.rootViewController.view 
          toView:app.splitViewController.view 
          duration:0.45f 
          options:UIViewAnimationOptionTransitionCrossDissolve 
         completion:^(BOOL finished){ 
          app.window.rootViewController = app.splitViewController; 
         }]; 
    } 
} 

}

我搜索整個互聯網,但我沒有發現任何有關+ NSNotificationCenter dictationViewClass]或這是什麼都可以。

編輯: 我現在注意到,它只發生,如果我改變rootViewController在一個過渡,如果我直接做沒有錯誤發生。

+0

所以我會尋找一個包含這種方法在你的來源 –

+0

我有一個類別,但沒有這樣的方法,奇怪的是整個事情永遠不會被執行。 – Sebastian

回答

0

它不是一個真正的答案,但同樣的錯誤再次發生在不同的動作上,無論動畫如何。 這個問題似乎是rootviewcontroller的改變,我用一個隱藏的tabbarcontroller取而代之,並在標籤之間切換,問題就消失了。

0

發送到類的無法識別的選擇器意味着沒有爲此類定義此類方法。嘗試:

  1. 刪除線,並嘗試它是否工作。
  2. 尋找一個類別withn你的源代碼是否包含此方法
  3. 自己寫的空白方法具有相同的名稱
  4. 揣摩ouy什麼意思做這種方法並執行它
1

你錯誤日誌is 2012-10-16 15:12:35.653 repdocApp[22898:c07] Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[NSNotificationCenter dictationViewClass]: unrecognized selector sent to class 0x1d63914

您正在調用錯誤的方法。在ios中不存在dictationViewClass。 這只是意味着你正試圖調用一種對應類(NSNotificationCenter)不存在的方法。 你應該改變設置通知如下

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(yourMethodWantToExcute:) name:@"NSNotificationName" object:nil]; 

我希望這將是對你有幫助。

+0

嗨,問題是沒有在代碼(我的或框架)是這個名字的東西,爲什麼它只發生在我從一個分支中刪除從未得到執行的返回? – Sebastian

+0

@Sebastian實際上你是以錯誤的方式註冊NSNotification該方法('dictationViewClass')不會退出'NSNotificationCenter'類這就是爲什麼你會得到異常。只需用'defaultCenter'替換'dictationViewClass'。更多關於如何設置通知https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSNotificationCenter_Class/Reference/Reference.html – Kamarshad

+0

問題是沒有這樣的代碼或我使用的任何框架。 – Sebastian