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 ответ() блок для того, чтобы иметь активировать его от расширения WatchKit. Вот один из способов это может быть реализовано, например: AppDelegate
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 приложения необходимо реализовать следующий метод:
- (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: ответ: запускает содержащее приложение в фоновом режиме когда iPhone (или iOS Simulator) разблокирован или заблокирован. Обратите внимание, что заявления Apple показывают, что расширение WatchKit всегда предназначалось для запуска вашего iPhone-приложения в фоновом режиме, и это была всего лишь деталь реализации симулятора, которая, по-видимому, запустила ваше приложение iPhone на переднем плане в предыдущих бета-версиях.
Если вы хотите протестировать приложение WatchKit и приложение для iPhone в одно и то же время, просто запустите приложение WatchKit из Xcode в меню «Схемы», а затем вручную запустите приложение iPhone в симуляторе, щелкнув значок своего трамплина ,
я не видел эту функцию в Xcode 6 бета3. ты это проверил? –
Hieu, говоря «вы проверили это» на человека, отвечающего на ваш вопрос, не проверив его самостоятельно, не является большой практикой переполнения стека. Поскольку ясно, что вы не проверяли это: https://developer.apple.com/library/prerelease/ios/documentation/WatchKit/Reference/WKInterfaceController_class/index.html # // apple_ref/occ/clm/WKInterfaceController/openParentApplication: reply: –
@DuncanBabbage Этот ответ неверен. 'openParentApplication' не будет запускать приложение на телефоне на переднем плане, только в фоновом режиме. Вы не отвечаете на исходный вопрос. –