我一直在尽一切努力来解决这个问题。当应用程序关闭时,我会收到一条通知,其中包含 2 个自定义项目(一个类型和一个 ID)。类型应该告诉我要加载哪个视图,而 id 应该告诉应用程序从数据库获取哪一行。我正在经历地狱般的尝试来解决这个问题。
我需要点击通知并让它带我到相关记录。到目前为止,我已经使用两种不同的方法几乎取得了成功,我将在下面概述这些方法。
我还应该指出,我知道有效负载从 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];
}
}
有了这个,我在详细信息视图上有一个名为 displayItem 的方法,我将使用它从 api 获取数据,然后显示它。这做了一些事情,但看起来视图从未真正加载。我的页面上有一个滚动视图和各种按钮,但从 addSubview 加载的只是背景图像。完全加载视图时没有发生任何真正的事情。我不知道该如何处理。
我尝试的第二件事是直接进入视图,如下所示:
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];
这似乎加载了视图的功能和美观,但有两个主要警告。 1.我不知道如何向它传递数据,2.当我尝试弹出时它不喜欢它,当我尝试从那里继续推送时它也很生气,几乎就像没有导航一样视图的控制器,即使整个应用程序都嵌入在导航控制器中。
非常感谢你的帮助。如果有人能帮我解决这个问题,我将感激不尽。