Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/99.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Watchkit OS 2,WCSession在后台运行_Ios_Objective C_Watchkit_Watchos 2 - Fatal编程技术网

Ios Watchkit OS 2,WCSession在后台运行

Ios Watchkit OS 2,WCSession在后台运行,ios,objective-c,watchkit,watchos-2,Ios,Objective C,Watchkit,Watchos 2,我有这段代码,当我在iPhone模拟器中打开应用程序时,它就可以工作了 并在ViewDidLoad中调用它。但如果我调用此应用程序内代理,我不能调用: - (void)session:(nonnull WCSession *)session didReceiveApplicationContext:(nonnull NSDictionary<NSString *,id> *)applicationContext 但我希望它能在后台运行。 我该怎么做 这是iPhone的.delega

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

- (void)session:(nonnull WCSession *)session didReceiveApplicationContext:(nonnull NSDictionary<NSString *,id> *)applicationContext
但我希望它能在后台运行。 我该怎么做

这是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;

}
在视图控制器中

-(void)senddata:(NSString *)data {

    WCSession* session = [WCSession defaultSession];


    NSDictionary *applicationDict = ///
    [session updateApplicationContext:applicationDict error:nil];
}
我是分机的

- (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];

在iOS端的视图控制器中激活
WCSession
不是一个好选择,因为如果在后台视图控制器中启动应用程序,则永远不会加载。 您应该在应用程序代理的
应用程序: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
方法移动到了您的应用程序委托

- (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];
    }
}
然后,当您需要向手表发送任何类型的数据时,您可以检索默认会话并调用方法,如
updateApplicationContext:error:

WCSession* session = [WCSession defaultSession];
[session updateApplicationContext:applicationDict error:nil];

谢谢,但是如何添加[self.session updateApplicationContext:applicationDict error:nil];从iPhone到.M,我需要调用self.session=[WCSession defaultSession];self.session1.delegate=self;[自我会话1激活会话];您必须将视图控制器的.m文件中的
viewdiload
中的代码移动到方法
应用程序:didfishlaunchwithoptions:
inside
AppDelegate.m
,创建项目时,此方法应由Xcode添加,如果不存在,则添加它。我在应用程序中添加了很好的功能:完成启动时使用了选项,但对于view controller。M我需要再次调用会话,如果可能的话,请给出示例或编写正确的代码,谢谢我需要在我的view controller中调用,因为我需要在viewController中调用会话,以便在应用程序委派后使用,但这是无效的[self.session updateApplicationContext:applicationDict error:nil];当我在应用程序中调用会话时:didFinishLaunchingWithOptions:before return在watch和view controller之间无法将所有数据发送到Viewcontroller之后