0

所以我正在使用 UILocalNotification 并且我已经非常熟悉如何

didfinishlaunchingwithoptions

didReceiveLocalNotification

用于在它们触发时处理通知。我可以用可以做很多事情的代码来填充这两个函数。

我似乎无法弄清楚如何让这些功能与我的应用程序的其余部分“交互”。让我解释一下我的意思。

我最初认为我可以在我的主视图控制器中创建一个委托协议,而不是在这两个函数中执行大部分逻辑。然后 AppDelegate 将注册为委托,然后我可以让通知事件调用我的视图控制器类中的方法并在那里执行大多数逻辑。所有这些都按预期工作——除了我没有预料到的一种情况。

从那以后,我弄清楚了为什么它不起作用。我在 MyViewController 的 viewDidLoad 函数中分配委托:

- (void) viewDidLoad
{
    [super viewDidLoad];

    MyAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];

    appDelegate.delegate = self;
}

这样做的问题是,当 App 冷启动时,在 MyViewController 的 viewDidLoad 函数之前调用了 didfinishlaunchingwithoptions。所以它永远没有机会成为代表。没有机会使用我的委托协议方法处理我在 didfinishlaunchingwithoptions 中获得的第一个 UILocalNotification。

所以我知道我的问题是什么,我只是想不出更好的方法来处理这些 UILocalNotification 事件。任何想法表示赞赏。

4

1 回答 1

1

我有一个解决方案,可能这不是一个好的解决方案。

您可以依赖NSUserDefaults

实现你的didFinishLaunchingWithOptions:喜欢:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
   //other code
   [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"notificationReceived"];
   return YES;
}

viewDidLoadMyViewController

- (void)viewDidLoad
 {
   if([[NSUserDefaults standardUserDefaults] boolForKey:@"notificationReceived"])
   {
      //notification received do the stuff
      //reset the bool
      [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"notificationReceived"];
   }
 }
于 2013-06-07T04:43:12.587 回答