从WatchKit 2.0连接到外部URL

时间:2015-10-10 11:47:47

标签: apple-watch nsurlrequest watchconnectivity

我想在WatchKit后台的REST界面中加载一些信息。是否有一些快速的方法来执行主机iOS应用程序传递的URL请求,或者我必须利用裸WatchConnectivity功能来编写特定协议?

4 个答案:

答案 0 :(得分:0)

您应该直接从WatchKit扩展程序使用NSURLSession。

答案 1 :(得分:0)

NSURLSession适用于Watchkit,但如果相关,你还需要在Watchkit扩展上添加允许任意负载。

请看这篇文章,

NSURLSession returns data as Null on Watch OS2 using Objective-C

答案 2 :(得分:0)

我正在使用sendMessageData:replyHandler:,但是我在使用它时遇到了问题。相关票证位于: https://stackoverflow.com/questions/33211760/sendmessagedata-does-not-call-didreceivemessagedata-on-the-counterpart

答案 3 :(得分:0)

尽管Apple的例子很快见https://developer.apple.com/videos/play/wwdc2015-228/?time=345,但我在NSProcessInfo包装器中贴了一个obejctive-c utlis的片段。

Apple的例子也使用了Semaphore,如果扩展名被置于睡眠状态,我已从下面省略了。

按照以下模式,您可以直接从手表中点击所需的服务。

NSProcessInfo *processInfo = [NSProcessInfo processInfo];

[processInfo performExpiringActivityWithReason:@"networkReq" usingBlock:^(BOOL expired) {
    if (!expired){            
        NSLog(@"we have an assertion");        
        NSTimeInterval secondsInThreeHours = 3 * 60 * 60;
        NSURL *forecast = [NSURL URLWithString:@"http::address"];

        NSURLSession *session = [NSURLSession sharedSession];
        [[session dataTaskWithURL:forecast
                completionHandler:^(NSData *data,
                                    NSURLResponse *response,
                                    NSError *error) {
                    // handle response
         }] resume];
    else{

        NSLog(@"Not background assertion or we are out of time");
    }
}];