我正在使用XCode 4.6,我正在尝试在iOS上构建一个本地通知功能,该功能将在重新输入app时执行一项功能。基本上我想更改某些标签中的文本并添加一些重新进入应用程序时发出声音。我以为自己走在正确的轨道上,但只有部分代码可以通过本地通知重新输入应用程序。
首先我将此功能添加到我的AppDelegate:
-(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification{
NSLog(@"test1"); //this traces successfully
myAppViewController * controller = [myAppViewController alloc];
[controller doSomething]; //calling a function in my myAppViewController.m
}
我以为我已经弄明白了,但现在只有NSLog在我的myAppViewController.m函数中工作:
-(void)doSomething{
NSLog(@"do something"); //traces successfully
self.notificationTime.text=@"something else"; //nothing happens here, it works in other functions but not here
[self doSomethingElse]; //calling another function from this function for further testing
}
下一个函数叫做....
-(void)doSomethingElse{
NSLog(@"do something else"); //this works
//this whole thing doesn't work -- no sound --
NSURL* url = [[NSBundle mainBundle] URLForResource:@"cash" withExtension:@"mp3"];
NSAssert(url, @"URL is valid.");
self.player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
[self.player prepareToPlay];
[self.player play];
//this doesn't work again
self.notificationTime.text=@"something else";
}
我希望在这里获得一些一般性建议,我们将不胜感激。如果有人知道解决问题的完全不同的方式,那也会很棒!
答案 0 :(得分:0)
您不需要分配app控制器的第二个实例。您可以使用self
。如果你这样做,代码是否按预期工作?
答案 1 :(得分:0)
仅在应用程序在前台运行时调用didReceiveLocalNotification
方法。如果您看到徽章并单击应用以启动徽章,则需要使用application:willFinishLaunchingWithOptions:
(或application:didFinishLaunchingWithOptions:
)处理本地通知。要使用这两种方法之一获取本地通知,请使用UIApplicationLaunchOptionsLocalNotificationKey
作为选项词典的关键。
请注意,从启动选项中提取本地通知后,调用didReceiveLocalNotification
方法是一种可行的方法。