2011-07-12 160 views
1

我有推送通知工作,但我想要做的下一件事是打開一個相關的視圖,當點擊通知。推送通知查看iPhone

在我appDelegate.mdidFinishLaunchingWithOptions,我有以下幾點:

NSString *params=[[launchOptions objectForKey:@"UIApplicationLaunchOptionsRemoteNotificationKey"] objectForKey:@"alertType"]; 

if ([params length] > 0) {//app launch when VIEW button of push notification clicked 

    if (params == @"sc") { 

     Alerts *alerts = [[Alerts alloc] initWithNibName:@"Alerts" bundle:nil]; 
     [[self navigationController] pushViewController:Alerts animated:YES]; 
     [Alerts release]; 
    } else { 

    } 
} 

然而,在這一行:[[self navigationController] pushViewController:Alerts animated:YES];,警告過來說法「-navigationController」未找到(返回類型默認爲「身份證')

我該如何糾正這個警告,我是否試圖推動didFinishLaunchingWithOptions中的相關視圖?

謝謝。

+0

你的應用程序委託中有一個導航控制器作爲屬性嗎? –

+0

我不這麼認爲。我怎樣才能使它作爲屬性,因爲我的'self.navigationController'工作在除'appDelegate'以外的其他頁面上。謝謝。 –

+0

它在其他「頁面」上工作,因爲它們不是頁面,而是ViewControllers。所有UIViewControllers自動具有navigationController屬性,但不是appDelegate。爲了工作,您必須在應用程序委託中手動創建您的navController,並在AppAspect建議您將其添加到您的視圖中。 – Cyrille

回答

1

您的navigationController可能不會被聲明爲@property,因此您不能使用[self navigationController]。只要嘗試self.navigationController,或者即使只是navigationController,如果這是您的名字.h

此外,請不要比較字符串與==。你必須做if ([params isEqualToString:@"sc"])。這比較內容而不是您的字符串的地址

+0

你是什麼意思「如果這是你的.h的名字」?我嘗試過'[self navigationController]','self.navigationController'和'navigationController',它並沒有出現在預測列表中。任何想法交配?謝謝。 –

+0

您的導航控制器在哪裏以及如何聲明?你能從你的'appDelegate.h'中發佈一個摘錄來顯示它嗎? – Cyrille

+0

在我的.h中,我必須聲明它是這樣的:'UIView * navigationController'? –

2

設置naviagationcontroller屬性後,必須從appdelegate方法向窗口添加任何導航控制器。

[self.window addSubview:navigationController.view]; 
[self.window makeKeyAndVisible]; 

然後,您可以按需要推送視圖。