2015-01-11 18 views

cevap

15

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 .

+0

sizin Info.plist (ler) in. Bunu kontrol ettin mi? –

+2

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: –

+1

@DuncanBabbage Bu cevap yanlış. 'openParentApplication', uygulamayı telefonda yalnızca ön planda değil, yalnızca arka planda başlatmaz. Asıl soruyu cevaplamıyorsun. –

5

Ebeveyn uygulamanızı ön planda açmanız gerekiyorsa, Handoff kullanın!

Örnek:

yerde her ikisi için ortak

: Uygulama Delegesi içinde iPhone'da

updateUserActivity(sharedUserActivityType, userInfo: [sharedIdentifierKey : 123456], webpageURL: nil) 

: senin İzle bölümünde

static let sharedUserActivityType = "com.yourcompany.yourapp.youraction" 
static let sharedIdentifierKey = "identifier" 

func application(application: UIApplication, willContinueUserActivityWithType userActivityType: String) -> Bool { 
    if (userActivityType == sharedUserActivityType) { 
     return true 
    } 
    return false 
} 

func application(application: UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: ([AnyObject]!) -> Void) -> Bool { 
    if (userActivity.activityType == sharedUserActivityType) { 
     if let userInfo = userActivity.userInfo as? [String : AnyObject] { 
      if let identifier = userInfo[sharedIdentifierKey] as? Int { 
       //Do something 
       let alert = UIAlertView(title: "Handoff", message: "Handoff has been triggered for identifier \(identifier)" , delegate: nil, cancelButtonTitle: "Thanks for the info!") 
       alert.show() 
       return true 
      } 
     } 
    } 
    return false 
} 

Ve nihayet (bu adım önemlidir !!!): i Xcode 6 beta3 bu işlevi görmedi

enter image description here

+0

lütfen ana uygulama uygulamasını açmak için ana projeyi kullanarak demo projesini sağlayabilir misiniz? –

İlgili konular