The Objective-C method geçerli:
+ (BOOL)openParentApplication:(NSDictionary *)userInfo
reply:(void (^)(NSDictionary *replyInfo,
NSError *error))reply
The Swift method geçerli:
class func openParentApplication(_ userInfo: [NSObject : AnyObject]!,
reply reply: (([NSObject : AnyObject]!,
NSError!) -> Void)!) -> Bool
Yani WatchKit uzantısından etkinleştirmek sahip olmak için bir cevap() blok iPhone uygulamasını geçmeleri gerekiyor.
- (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 yöntemi openParentApplication: cevap:
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 uygulamanın AppDelegate aşağıdaki yöntemi uygulamak gerekir: Burada örneğin, o uygulanabilecek bir yolu arka planda içeren uygulamayı başlattı iPhone (veya iOS Simulator) kilidi açıldığında veya kilitlendiğinde. Apple'ın ifadeleri, WatchKit uzantısının her zaman iPhone uygulamanızı arka planda başlatmayı amaçladığını ve iPhone uygulamanızı önceki betalardaki ön planda başlatmak için göründüğü simülatörün yalnızca bir uygulama ayrıntısı olduğunu belirtir. Eğer WatchKit uygulaması ve aynı anda çalışan iPhone uygulamanızı test etmek isterseniz
basitçe Düzenleri menüsü altındaki Xcode gelen WatchKit uygulaması başlatacak ve ardından manuel olarak sıçrama tahtası ikonuna tıklayarak simülatörde iPhone uygulamasını başlatmak .
sizin Info.plist (ler) in. Bunu kontrol ettin mi? –
Hieu, soruyu cevaplayan kişiye "bunu kontrol ettin" diyerek, kendiniz kontrol etmeden harika Stack Overflow uygulaması değildir. Çünkü kontrol etmediğiniz belli: https://developer.apple.com/library/prerelease/ios/documentation/WatchKit/Reference/WKInterfaceController_class/index.html # // apple_ref/occ/clm/WKInterfaceController/openParentApplication: yanıt: –
@DuncanBabbage Bu cevap yanlış. 'openParentApplication', uygulamayı telefonda yalnızca ön planda değil, yalnızca arka planda başlatmaz. Asıl soruyu cevaplamıyorsun. –