首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从UILocalNotification触发WatchKit

从UILocalNotification触发WatchKit
EN

Stack Overflow用户
提问于 2015-05-07 13:39:13
回答 3查看 1.7K关注 0票数 2

我在Swift中有一个具有以下目标的Xcode项目:

  • iOS应用程序
  • WatchKit扩展/ WatchKit应用程序
  • “公共”项目,由“主要”项目和扩展项目使用

在公共项目中,我有以下代码:

代码语言:javascript
复制
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应用程序发出通知:

代码语言:javascript
复制
@IBAction func XXX(sender: AnyObject) {
  NotificationHelper.scheduleNotification(100)
}

但是从WatchKit扩展执行的相同代码不会触发任何通知。方法被调用,但是在iPhone或Apple上没有发生任何事情,不会触发任何通知。

有人能帮我吗?

如何从WatchKit扩展逻辑安排通知?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-05-07 13:43:13

应用程序扩展不允许访问sharedApplication。我猜在您的情况下,sharedApplication正在返回nil,这将解释为什么没有计划通知。

我建议在后台使用类似openParentApplication:reply:的东西打开主机iOS应用程序,并从那里安排通知。

票数 3
EN

Stack Overflow用户

发布于 2015-05-07 13:48:57

我想你还没有真正的设备,但正在使用模拟器吗?那么,您可能根本无法向监视发送通知。这是因为苹果还没有(还)在XCode中添加这个功能。

若要在监视模拟器上查看和测试通知接口,请使用如下所述的有效载荷文件(“指定用于测试的notification”一段):https://developer.apple.com/library/ios/documentation/General/Conceptual/WatchKitProgrammingGuide/ConfiguringYourXcodeProject.html

而且对即将到来的改变也没有太大的信心。正如在监视文档中所描述的那样,iOS将自行决定将通知发送到何处(当您最终到达硬件版本时.)

票数 0
EN

Stack Overflow用户

发布于 2015-09-09 07:07:15

首先,从iOS应用程序运行WatchKit应用程序:

代码语言:javascript
复制
NSDictionary *userInfo = @{@"text":@"Hello world!",
                           @"delay":@10.0};
[WKInterfaceController openParentApplication:userInfo reply:^(NSDictionary *replyInfo, NSError *error) {
    // Completion
}];

然后在iOS设备上处理:

代码语言:javascript
复制
- (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应用程序:

代码语言:javascript
复制
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [application registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeAlert) categories:nil]];
    return YES;
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30102806

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档