- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我刚刚使用教程/示例代码在我的应用程序中设置了 WCConnectivity,我觉得我已经正确实现了它。我没有使用模拟器进行测试。出于某种原因,即使一切设置正确,didReceiveApplicationContext 也没有在 watch 应用程序中被调用。
我尝试在 WatchKit 应用程序的接口(interface) Controller 中调用 ExtensionDelegate 并使用 NSUserDefaults 来设置接口(interface) Controller 数据。
iOS 应用
ViewController.m
- (void) viewDidLoad{
if ([WCSession isSupported]) {
WCSession *session = [WCSession defaultSession];
session.delegate = self;
[session activateSession];
}
}
-(void) saveTrip{
NSMutableArray *currentTrips = [NSMutableArray arrayWithArray:[self.sharedDefaults objectForKey:@"UserLocations"]];
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:newLocation];
[currentTrips addObject:data];
[self.sharedDefaults setObject:currentTrips forKey:@"UserLocations"];
[self.sharedDefaults synchronize];
WCSession *session = [WCSession defaultSession];
NSDictionary *applicationDict = [[NSDictionary alloc] initWithObjects:@[currentTrips] forKeys:@[@"UserLocations"]];;
[session updateApplicationContext:applicationDict error:nil];
}
观看扩展代码
ExtensionDelegate.m
- (void)applicationDidFinishLaunching {
if ([WCSession isSupported]) {
WCSession *session = [WCSession defaultSession];
session.delegate = self;
[session activateSession];
}
}
- (void)session:(nonnull WCSession *)session didReceiveApplicationContext:(nonnull NSDictionary<NSString *,id> *)applicationContext {
self.places= [applicationContext objectForKey:@"UserLocations"];
[[NSUserDefaults standardUserDefaults] setObject:self.places forKey:@"UserLocations"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
InterfaceController.m
- (void)willActivate {
[super willActivate];
self.placesData = [NSMutableArray arrayWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"UserLocations"]];
[self loadData];
}
最佳答案
对我来说有两件事:
在字典中传递无效值。甚至不能通过 NSNull()
来表示 nil 值。如果其中有无法在 plist 中表示的数据,则它会失败。
如果字典没有改变,对 updateApplicationContext
的后续调用将不会触发对 didReceiveApplicationContext
的相应调用。要强制更新(可能在调试版本中),您可以将 UUID 添加到有效负载中,例如
context["force_send"] = UUID().uuidString
关于ios - didReceiveApplicationContext 未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35854473/
我刚刚使用教程/示例代码在我的应用程序中设置了 WCConnectivity,我觉得我已经正确实现了它。我没有使用模拟器进行测试。出于某种原因,即使一切设置正确,didReceiveApplicati
当我在 Xcode 中运行带有 iOS 和 watchOS 模拟器的 watch 连接应用程序时,WCSession 委托(delegate)方法 didReceiveApplicationConte
我在 AppleWatch 和 iPhone 之间通信时遇到问题。 iPhone to Watch 通信正常。 在 iPhone 上观看:AppDelegate 中的 didReceiveApplic
我无法调用didReceiveApplicationContext。有什么想法吗? 接口(interface) Controller : import WatchKit import Foundati
在我的手机应用程序中,WCSession 在 AppDelegate 的 didFinishLaunchingWithOptions 方法中激活。 watch 应用正在向手机应用发送 applicat
我已经阅读了下面的 q/a,这很棒。这正是我在一个测试项目中所做的,它工作得很好。 我现在已经创建了我的真实项目,但是在 Watch 扩展中,session: didReceiveApplicatio
我正在尝试将数据从我的 iOS 应用程序发送到我的 Watch 应用程序。数据发送似乎有效,但接收无效。 当 Watch 应用收到数据时,它会给我这个异常: [WC] -[WCSession hand
我在 AppDelegate 中调用 updateApplicationContext 方法来检查用户名并将其发送到 Apple Watch。 NSDictionary *applicationDic
我是一名优秀的程序员,十分优秀!