我有这个代码,当我在iPhone模拟器中打开应用程序并在ViewDidLoad中调用它时,它可以工作。但是如果我在应用委托中调用它,我就不能调用:
- (void)session:(nonnull WCSession *)session didReceiveApplicationContext:(nonnull NSDictionary<NSString *,id> *)applicationContext在手表零件中
if ([WCSession isSupported]) {
self.session = [WCSession defaultSession];
self.session.delegate = self;
[self.session activateSession];
return YES;
}但我希望它能在后台运行应用程序。我该怎么做呢?
我是iPhone的.delegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *mainViewController = [storyboard instantiateInitialViewController];
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.rootViewController = mainViewController;
[self.window makeKeyAndVisible];
if ([WCSession isSupported]) {
self.session = [WCSession defaultSession];
self.session.delegate = self;
[self.session activateSession];
}
return YES;
}在ViewController中
-(void)senddata:(NSString *)data {
WCSession* session = [WCSession defaultSession];
NSDictionary *applicationDict = ///
[session updateApplicationContext:applicationDict error:nil];
}它是Extension中的.m
- (void)willActivate {
// This method is called when watch view controller is about to be visible to user
[super willActivate];
if ([WCSession isSupported]) {
self.session = [WCSession defaultSession];
self.session.delegate = self;
[self.session activateSession];
}
[self.session updateApplicationContext:applicationDict error:nil];发布于 2015-08-27 22:42:54
在iOS端的视图控制器中激活WCSession不是一个好的选择,因为如果应用程序是在后台启动的,视图控制器将永远不会加载。你应该在你的应用代理的application:didFinishLaunchingWithOptions:方法中激活它。
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//Any other code you might have
if ([WCSession isSupported]) {
self.session = [WCSession defaultSession];
self.session.delegate = self;
[self.session activateSession];
}
}在这里,我假设你已经将你的WCSessionDelegate方法移到了你的应用委托中。
然后,当您需要向手表发送任何类型的数据时,您可以检索默认会话并调用updateApplicationContext:error:等方法
WCSession* session = [WCSession defaultSession];
[session updateApplicationContext:applicationDict error:nil];https://stackoverflow.com/questions/32250067
复制相似问题