- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在开发 Apple Watch 应用程序。当 iPhone 上发生特定事件时,我能够从 iPhone 向 Apple Watch 发送数据。但是,我希望 watch 在开始运行时获取数据。我应该如何处理这个问题?最有效的方法是什么?
最佳答案
WatchConnectivity
首先,应该相互通信的两个类(iOS 和 watchOS)需要符合 <WCSessionDelegate>
和 #import
WatchConnectivity
框架
在发送数据之前,您需要检查您的设备是否能够发送数据
if ([WCSession isSupported]) {
WCSession *session = [WCSession defaultSession];
session.delegate = self;
[session activateSession];
NSLog(@"WCSession is supported");
}
然后,如果您希望使用“交互式消息传递”(sendMessage API),则需要先查看其他设备是否可达:
if ([[WCSession defaultSession] isReachable]) {
//Here is where you will send you data
}
“后台操作”API 不需要在您调用 WCSession API 时可以访问对应设备。
在应用程序之间传输数据时,您有多种选择,在 Apple Documentation 中它们是这样描述的:
使用 updateApplicationContext:error:
仅将最新的状态信息传达给对方的方法。当对方醒来时,它可以使用此信息来更新自己的状态并保持同步。使用此方法发送新词典会覆盖以前的词典。
使用 sendMessage:replyHandler:errorHandler:
或 sendMessageData:replyHandler:errorHandler:
立即将数据传输给对方的方法。这些方法用于在您的 iOS 应用和 WatchKit 扩展同时处于事件状态时进行即时通信。
使用 transferUserInfo:
在后台传输数据字典的方法。您发送的词典正在排队等待传送给对方,并且在当前应用程序暂停或终止时继续传输。
使用 transferFile:metadata:
在后台传输文件的方法。如果您想要发送的不仅仅是一个简单的值字典,请使用此方法。例如,使用此方法发送图像或基于文件的文档。
我将举例说明如何使用 Application Context 发送/接收数据
发送数据:
WCSession *session = [WCSession defaultSession];
NSError *error;
[session updateApplicationContext:@{@"firstItem": @"item1", @"secondItem":[NSNumber numberWithInt:2]} error:&error];
接收数据:
- (void) session:(nonnull WCSession *)session didReceiveApplicationContext:(nonnull NSDictionary<NSString *,id> *)applicationContext {
NSLog(@"%@", applicationContext);
NSString *item1 = [applicationContext objectForKey:@"firstItem"];
int item2 = [[applicationContext objectForKey:@"secondItem"] intValue];
}
有关 WatchConnectivity 的更多信息,我强烈建议您观看 WWDC2015 session video并阅读 Apple Documentation on WatchConnectivity
关于ios - WatchOS 从 iPhone 获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38693969/
我有一个现有的 WatchOS 2 应用程序。我想升级它并添加一些 WatchOS 3 功能,所以我安装了 Xcode 8 beta 3。我的问题是我是否需要为 WatchOS 3 项目创建另一个目标
我正在尝试构建一个应用程序,它支持 watch OS2 上的多个复杂功能系列,例如模块化大、实用大、圆形小等,每个都显示来自应用程序的各种有意义的信息。我知道复杂性与我们自 OS1 以来在用户交互方面
我的 iOS 和 watchOS 应用程序之间有一个共享框架,其中包含一个带有一些命名颜色的 Assets 目录。我想在我的 watchOS 应用程序中访问命名颜色。在 iOS 中,我可以使用 UIC
我在 watchOS 5 和 Apple Watch Series 4 上遇到了一些问题,因为它们没有正确使用它们的tintColor。相反,它们仅显示白色文本。同一张脸上的其他第 3 方并发症显示出
在昨天的 WWDC 上,Apple 宣布在 watchOS 5 中支持 WebKit。我已经下载了 Xcode 10,但在 Interface Builder 或 Frameworks and Lib
我正在考虑更新到 watchOS 6 的独立应用程序 (as Apple suggests),但我不清楚安装了我的应用程序的旧 watchOS 版本的用户会发生什么。更具体地说: 如果用户在其 wat
我有一个仅针对 watchOS 6 及更高版本的 watchOS Xcode 项目,它是用 SwiftUI 编写的,并且它的所有依赖项都由 Swift Package Manager 处理。我注意到在
我知道 Apple watchOS 2.0 应用程序需要一些修改(特别是在双向通信方面).... 但是,对于已经在 App Store 中为 1.0 编写的所有 Watch 应用程序,它们会在没有修改
Previous 我使用 NSUserDefaults 在 watch 和应用程序之间共享基本变量。 我的目标是在 watch 上显示存储在 iPhone 应用程序 NSUserDefaults 上的
想要在 watchOS 下运行应用程序,在 Xcode beta 下出现错误:域:IDELaunchErrorDomain 代码:15 失败原因:构建和运行启动失败,因为系统似乎无法识别要运行的应用程
我有一个公共(public)交通应用程序,其中包含火车的实时出发数据。我想添加一个复杂功能,显示下一趟火车的出发时间。 是否可以显示(或刷新)复杂功能的实时数据?例如,显示“到 X 站 3 分钟”。根
我正在为营养跟踪应用程序构建并发症。我想使用提供多个较小的并发症,以便用户可以跟踪他们的营养。 例如: 'MyApp - 碳水化合物' 'MyApp - 蛋白质' 'MyApp - 胖子' 通过这种方
我希望有人能够帮助我理解在我的 WatchOS 2 应用程序中尝试实现 NSURLSession 时遇到的问题。 无论出于何种原因,我收到错误; Error Domain=NSCocoaErrorDo
我想让界面像健康应用一样在全屏高度上可滚动,并且不允许在中间停止滚动,这可能吗? 例如,我有两个按钮,我希望它们在屏幕上可见,另一个在滚动后显示。主要部分是,如果滚动开始,它将自行继续,直到第二个按钮
在 watchOS 中,如果应用程序中嵌入了自定义字体,则该字体肯定可以在 WkInterfaceLabel、WKInterfaceButton 等上使用。 该字体适用于 watchOS 的通知 Vi
现在我没有开发者帐户,所以我曾经使用 Xcode 在 Apple Watch Series 3 上安装 watch 应用程序。在过去的几个月中,我观察到即使我每天运行该应用程序,我的应用程序通常也会在
我做了一个应用程序。我向应用程序发送推送通知。我也想在 watchos 上收到它们。我必须为 watchOs 制作一个项目并制作一个应用程序吗?或者我在 watchOs 上自动收到来自 iPhone
问题:Apple Watch 上创建的通知只是间歇性地提醒用户它们的存在。从屏幕顶部向下滑动时,通知中心会显示已收到通知。为什么我们不是每次都收到警报? 我们正在使用 Apple 推荐的方法(如 UN
我有一个 Core Data 应用程序。这就像一个比方说一个新闻应用程序。每个条目都有名称、ID、日期、发布者、详细信息等。主 iOS 应用程序可以有很多新闻条目。我只想展示 WatchOS 应用程序
在 Xcode 中,有一个地方可以设置界面 Controller 关闭时的 Action : override func didDeactivate() { // This method
我是一名优秀的程序员,十分优秀!