我在Swift中有一个具有以下目标的Xcode项目:
在公共项目中,我有以下代码:
public class func scheduleNotification(seconds: Int) {
var notification = UILocalNotification()
notification.fireDate = NSDate().dateByAddingTimeInterval(NSTimeInterval(seconds))
notification.alertBody = "item"
notification.alertAction = "open"
notification.soundName = UILocalNotificationDefaultSoundName
notification.userInfo = ["UUID": "XX", ]
notification.category = "CATEGORY"
UIApplication.sharedApplication().scheduleLocalNotification(notification)
}我能够调用此方法并从iOS应用程序发出通知:
@IBAction func XXX(sender: AnyObject) {
NotificationHelper.scheduleNotification(100)
}但是从WatchKit扩展执行的相同代码不会触发任何通知。方法被调用,但是在iPhone或Apple上没有发生任何事情,不会触发任何通知。
有人能帮我吗?
如何从WatchKit扩展逻辑安排通知?
发布于 2015-05-07 13:43:13
应用程序扩展不允许访问sharedApplication。我猜在您的情况下,sharedApplication正在返回nil,这将解释为什么没有计划通知。
我建议在后台使用类似openParentApplication:reply:的东西打开主机iOS应用程序,并从那里安排通知。
发布于 2015-05-07 13:48:57
我想你还没有真正的设备,但正在使用模拟器吗?那么,您可能根本无法向监视发送通知。这是因为苹果还没有(还)在XCode中添加这个功能。
若要在监视模拟器上查看和测试通知接口,请使用如下所述的有效载荷文件(“指定用于测试的notification”一段):https://developer.apple.com/library/ios/documentation/General/Conceptual/WatchKitProgrammingGuide/ConfiguringYourXcodeProject.html
而且对即将到来的改变也没有太大的信心。正如在监视文档中所描述的那样,iOS将自行决定将通知发送到何处(当您最终到达硬件版本时.)
发布于 2015-09-09 07:07:15
首先,从iOS应用程序运行WatchKit应用程序:
NSDictionary *userInfo = @{@"text":@"Hello world!",
@"delay":@10.0};
[WKInterfaceController openParentApplication:userInfo reply:^(NSDictionary *replyInfo, NSError *error) {
// Completion
}];然后在iOS设备上处理:
- (void)application:(UIApplication *)application handleWatchKitExtensionRequest:(NSDictionary *)userInfo reply:(void (^)(NSDictionary *))reply
{
UIBackgroundTaskIdentifier tid = [application beginBackgroundTaskWithExpirationHandler:nil];
UILocalNotification *note = [[UILocalNotification alloc] init];
note.alertBody = userInfo[@"text"];
note.fireDate = [NSDate dateWithTimeIntervalSinceNow:[userInfo[@"delay"] doubleValue]];
note.timeZone = [NSTimeZone systemTimeZone];
note.userInfo = userInfo;
[application scheduleLocalNotification:note];
reply(nil); // Completion callback
[application endBackgroundTask:tid];
}当然,不要忘记为通知注册iOS应用程序:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[application registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeAlert) categories:nil]];
return YES;
}https://stackoverflow.com/questions/30102806
复制相似问题