首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Watchkit OS 2,WCSession在后台运行

Watchkit OS 2,WCSession在后台运行
EN

Stack Overflow用户
提问于 2015-08-27 20:58:45
回答 1查看 2K关注 0票数 2

我有这个代码,当我在iPhone模拟器中打开应用程序并在ViewDidLoad中调用它时,它可以工作。但是如果我在应用委托中调用它,我就不能调用:

代码语言:javascript
复制
- (void)session:(nonnull WCSession *)session didReceiveApplicationContext:(nonnull NSDictionary<NSString *,id> *)applicationContext

在手表零件中

代码语言:javascript
复制
if ([WCSession isSupported]) {
        self.session = [WCSession defaultSession];
        self.session.delegate = self;
        [self.session activateSession];


       return YES;
}

但我希望它能在后台运行应用程序。我该怎么做呢?

我是iPhone的.delegate

代码语言:javascript
复制
    - (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中

代码语言:javascript
复制
-(void)senddata:(NSString *)data {

    WCSession* session = [WCSession defaultSession];


    NSDictionary *applicationDict = ///
    [session updateApplicationContext:applicationDict error:nil];
}

它是Extension中的.m

代码语言:javascript
复制
- (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];
EN

回答 1

Stack Overflow用户

发布于 2015-08-27 22:42:54

在iOS端的视图控制器中激活WCSession不是一个好的选择,因为如果应用程序是在后台启动的,视图控制器将永远不会加载。你应该在你的应用代理的application:didFinishLaunchingWithOptions:方法中激活它。

代码语言:javascript
复制
- (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:等方法

代码语言:javascript
复制
WCSession* session = [WCSession defaultSession];
[session updateApplicationContext:applicationDict error:nil];
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32250067

复制
相关文章

相似问题

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