私はこれを解決するためにあらゆることを試みてきました。タイプと ID の 2 つのカスタム アイテムでアプリを閉じると、通知が届きます。タイプはロードするビューを教えてくれるはずで、id はデータベースから取得する行をアプリに教えてくれるはずです。私はこれを理解しようとして地獄を通り抜けています。
通知をクリックして、関連するレコードに移動する必要があります。これまでのところ、以下に概説する 2 つの異なる方法でほぼ成功しています。
また、ペイロードが死ぬまでデバッグしたため、APNSからペイロードが正しく機能していることを知っていることも指摘する必要があります:)
私が最初に試したのは次のとおりです。
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
NSString *itemType = [[userInfo objectForKey:@"T"] description];
NSString *itemId = [[userInfo objectForKey:@"ID"] description];
self.window=[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// type 1 = call, type 2 = contact
if ([itemType isEqual: @"1"]) {
Leads_CallsDetailViewController *callView = [[Leads_CallsDetailViewController alloc] init];
[callView displayItem:itemId];
[self.window addSubview:callView.view];
[self.window makeKeyAndVisible];
} else if([itemType isEqual: @"2"]) {
Leads_ContactsDetailViewController *contactView = [[Leads_ContactsDetailViewController alloc] init];
[contactView displayItem:itemId];
[self.window addSubview:contactView.view];
[self.window makeKeyAndVisible];
}
}
これには、API からデータを取得して表示するために使用する displayItem という詳細ビューのメソッドがあります。これで何とかなりましたが、実際にはビューがロードされていないように見えました。ページにスクロールビューとさまざまなボタンがありますが、addSubview から読み込まれたのは背景画像だけでした。ビューを完全にロードすることは実際には何も起こりませんでした。私はそれをどのように処理するかわかりませんでした。
私が試した2番目のことは、次のようにビューに直接移動することでした:
NSString *storyboardId = @"Leads_Calls_SB";
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *initViewController = [storyboard instantiateViewControllerWithIdentifier:storyboardId];
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.rootViewController = initViewController;
[self.window makeKeyAndVisible];
これは、ビューの機能と見栄えをロードするように見えますが、2 つの主な注意事項があります。1.データを渡す方法がわかりません.2.ポップバックしようとすると気に入らず、そこからプッシュをセグしようとすると怒られます.ほとんどナビゲーションがないかのように.アプリケーション全体がナビゲーション コントローラーに埋め込まれている場合でも、ビューのコントローラー。
どうもありがとうございました。誰かが私がこれを理解するのを手伝ってくれるなら、私はあなたに感謝します.