我有一个我想继续运行的企业应用程序,因此它可以调用web服务并在需要他们做某事时告知用户。
所以,它现在在后台运行,它会调用,得到结果,但通知用户是我的问题。
当我关闭UILocalNotification
时,警报不会调用UIAlertDelegate
,我也看不到如何设置警报。
以下是我执行通知的代码,这实际上会显示警报,但我需要它然后调出View
以便他们可以看到该表,但是{{1}它打开不是我的应用程序使用的两个之一。
View
另外,所以我试着提出一个警告,我可以设置代理,所以在我的控制器中,我调用上面的代码,我也称之为:
UILocalNotification *localNotif = [[UILocalNotification alloc] init];
if (localNotif) {
localNotif.alertBody = [NSString stringWithFormat:NSLocalizedString(@"%@ has a message for you.", nil), @"FYR"];
localNotif.alertAction = NSLocalizedString(@"Read Msg", nil);
localNotif.soundName = nil;
localNotif.applicationIconBadgeNumber = -1;
NSDictionary *infoDict = [NSDictionary dictionaryWithObjectsAndKeys:@"Your Background Task works", ItemListKey, @"Message from FYR", MessageTitleKey, nil];
localNotif.userInfo = infoDict;
[[UIApplication sharedApplication] presentLocalNotificationNow:localNotif];
[localNotif release];
}
然后选择此通知并最终调用此函数,这确实有效,但用户看不到警报,我希望因为它在后台。
[[NSNotificationCenter defaultCenter]
postNotificationName:@"ShowAlert"
object:nil
userInfo:mydata];
在主代表中,我已经定义了这个,以及相应的函数:
- (void) _showAlert:(NSString*)pushmessage withTitle:(NSString*)title {
NSLog(@"%@", @"Attemping to show alert");
UIAlertView* alertView = [[UIAlertView alloc] initWithTitle:title
message:pushmessage
delegate:self
cancelButtonTitle:@"No"
otherButtonTitles:@"Yes",nil];
[alertView show];
if (alertView) {
[alertView release];
}
}
我的想法是,如果我可以获得弹出的警报来调用此委托,那么它可以执行此代码:
@interface FYRViewAppDelegate : NSObject <UIApplicationDelegate, UIAlertViewDelegate> {
那么,有没有办法让- (void)alertView:(UIAlertView *)alertview clickedButtonAtIndex:(NSInteger)buttonIndex {
alertview--;
if (buttonIndex == 0) {
} else {
[self.window addSubview:[tableController view]];
}
}
使用我的代表进行提醒?
或者,当应用程序在后台时,是否有办法显示警报?
或者,我是否需要编写两个应用程序,因此它们与远程通知进行通信,因此当应用程序在后台运行时会运行,然后通过远程通知启动主应用程序。我不喜欢这种方法,因为它似乎非常混乱,但可能会有效。
由于程序永远不会停止运行
UILocalNotification
仅在启动时调用,本地通知从不调用它,也永远不会调用它:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
。
答案 0 :(得分:0)
我认为您在应用程序处于活动状态时不发布通知。你不能简单地在发布本地通知时设置一个标志,然后在应用程序变为活动状态时检查标志:
- (void)applicationDidBecomeActive:(UIApplication *)application
{
if (localNotificationPosted) {
// Do whatever you need to do.
}
}
这可能是正确的行为,因为除非用户驳回通知,否则应用程序将变为活动状态。即使用户驳回通知,下次打开应用程序时显示新消息也许并不是件坏事。