根据本地通知设置视图

时间:2013-05-24 20:43:41

标签: ios uilocalnotification multitasking

我正在编写一个应用程序,让用户知道他们每天在同一时间等待新提示。如果应用程序在前台运行,我已经能够安排通知并为其编写代码。我遇到的问题是如何在应用程序处于后台时发生同样的事情。复杂的是我正在根据通知本身设置视图(哪些按钮是可见的等),因为下一步是要有第二个通知,使视图自己设置不同。目前,我在方法中的代码如下所示:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:
  (NSDictionary *)launchOptions
  {
   // Override point for customization after application launch.
    UILocalNotification *note = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];
    NSString *val = [note.userInfo objectForKey:1];
    if ([val isEqual: @"first"]) {

    }

    return YES;
}

我的问题是我不知道如何在if语句中设置视图(即如何在视图中设置两个按钮[将它们称为button1和button2])。任何答案都会非常感激,如果这是一个令人难以置信的明显的事情,那么我道歉并且只要求某人至少指出我正确的方向。感谢

2 个答案:

答案 0 :(得分:0)

不是100%,但相信

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:
  (NSDictionary *)launchOptions

在开始加载视图之前完成,这样就更有意义了。

考虑到这一点,并且我已成功使用,我建议您设置一个公共var on app委托,用于存储您需要的信息。

之后只是检查

- (void)viewDidLoad

在viewController中,如果var为任何东西,并按照应用程序在Foreground中时的方式处理信息。

答案 1 :(得分:0)

我将尝试为您的问题提供更一般的答案:iOS编程基于MVC(模型 - 视图 - 控制器)软件架构模式,因此您必须使您的应用程序尽可能地符合MVC。这意味着,在您的情况下,只要您收到本地通知,无论您的应用程序在前台运行或在后台睡觉或只是准备从头开始,如果MVC砖块,应用程序将以相同的方式运行正确设置。

所以:

  • 本地通知向应用提供了一些新数据,因此您必须更新模型
  • 更新模型后,您会通知应用程序视图控制器模型更改
  • 视图控制器如果可见将反映代表模型的视图中的更改,如果不可见,您的应用必须显示视图控制器,然后根据模型状态刷新视图。

显然,如何执行此操作取决于您的应用显示不同视图的方式和位置,但为了简单起见,您可以:

  • 创建反映启动时本地通知的模型(application:didFinishLaunchingWithOptions :)
  • 创建在启动时显示本地通知数据的视图控制器(注意:通过为视图控制器提供模型,您“初始化”视图控制器,您还不关心视图)
  • 然后在模型和视图控制器初始化后处理本地通知

因此,当您收到应用程序的本地通知时:

  • 更新模型(当应用处于前台或从睡眠状态恢复或从头开始时,存在于所有三种情况中)
  • 此时如果视图控制器视图已经是可见的,那么您只需使用新的模型数据刷新它,如果不可见,则在视图层次结构中添加视图控制器视图(例如,通过在主导航控制器堆栈中将其推送) ;视图刷新将由viewDidLoad:
  • 完成

正如您所看到的,除了需要在应用获取通知时显示本地通知相关视图时,您不需要任何特殊代码来管理它。显然,如果您的本地通知视图位于视图层次结构的深层,并且您必须保持一定的一致性,则事情要复杂得多:在这种情况下,您必须重建整个层次结构,并且执行此操作的可能性取决于本地通知提供的信息。 在简单的情况下,即在实例化主导航控制器后,可以将本地通知视图控制器放在主窗口层次结构中: [applicationWindow setRootController:mainNavigationController] 您将在导航控制器堆栈中推送本地通知控制器: [mainNavigationController pushViewController:myLocalNotificationViewController animated:YES]

很抱歉,如果我没有详细说明您的具体问题(我不能),但可能我的解释会帮助您了解您的案例不是特例,但可以通过仔细跟踪主要案例轻松管理iOS架构模式。