gpt4 book ai didi

swift - 如何从我的 WatchKit 应用程序打开 iPhone 上的父应用程序?

转载 作者:搜寻专家 更新时间:2023-10-30 21:49:14 26 4
gpt4 key购买 nike

我正在尝试打开我的 Apple Watch 应用程序的父应用程序。

在 Xcode Beta 2 中我们可以使用这段代码:

WKInterFaceController.openParentApplication

但是,在 Xcode beta 3 中,我再也找不到该代码了。现在我不知道如何从 watch 应用程序打开父应用程序。请帮忙。

最佳答案

The Objective-C method是:

+ (BOOL)openParentApplication:(NSDictionary *)userInfo
reply:(void (^)(NSDictionary *replyInfo,
NSError *error))reply

The Swift method是:

class func openParentApplication(_ userInfo: [NSObject : AnyObject]!,
reply reply: (([NSObject : AnyObject]!,
NSError!) -> Void)!) -> Bool

因此您需要向 iPhone 应用程序传递一个 reply() block ,以便从您的 WatchKit 扩展中激活它。下面是它的一种实现方式,例如:

NSString *requestString = [NSString stringWithFormat:@"executeMethodA"]; // This string is arbitrary, just must match here and at the iPhone side of the implementation.
NSDictionary *applicationData = [[NSDictionary alloc] initWithObjects:@[requestString] forKeys:@[@"theRequestString"]];

[WKInterfaceController openParentApplication:applicationData reply:^(NSDictionary *replyInfo, NSError *error) {
NSLog(@"\nReply info: %@\nError: %@",replyInfo, error);
}];

您的 iPhone 应用程序的 AppDelegate 需要实现以下方法:

- (void)application:(UIApplication *)application handleWatchKitExtensionRequest:(NSDictionary *)userInfo reply:(void(^)(NSDictionary *replyInfo))reply {
NSString * request = [userInfo objectForKey:@"requestString"];

if ([request isEqualToString:@"executeMethodA"]) {
// Do whatever you want to do when sent the message. For instance...
[self executeMethodABC];
}

// This is just an example of what you could return. The one requirement is
// you do have to execute the reply block, even if it is just to 'reply(nil)'.
// All of the objects in the dictionary [must be serializable to a property list file][3].
// If necessary, you can covert other objects to NSData blobs first.
NSArray * objects = [[NSArray alloc] initWithObjects:myObjectA, myObjectB, myObjectC, nil];
NSArray * keys = [[NSArray alloc] initWithObjects:@"objectAName", @"objectBName", @"objectCName", nil];
NSDictionary * replyContent = [[NSDictionary alloc] initWithObjects:objects forKeys:keys];

reply(replyContent);
}

WKInterfaceController 方法 openParentApplication:reply:当 iPhone(或 iOS 模拟器)解锁或锁定时,在后台启动包含的应用程序。请注意,Apple 的声明表明 WatchKit 扩展始终旨在在后台启动您的 iPhone 应用程序,而在之前的测试版中它似乎在前台启动您的 iPhone 应用程序只是模拟器的一个实现细节。

如果您想同时测试您的 WatchKit 应用程序和您的 iPhone 应用程序,只需从 Xcode 的“方案”菜单下启动 WatchKit 应用程序,然后通过单击其跳板图标在模拟器中手动启动您的 iPhone 应用程序。

关于swift - 如何从我的 WatchKit 应用程序打开 iPhone 上的父应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27884123/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com