2015-01-23 20 views
6

WatchKit Uygulamamdaki bilgileri ana ana uygulamamma aktarmaya çalışıyorum ve anladığım kadarıyla sadece openParentApplication izleme kitimde kullanabilmem gerekiyor AppDelegate.swift içinde handleWatchKitExtensionRequest tarafından alınan, ancak tetiklenecek handleWatchKitExtensionRequest almak için görünmüyor.handleWatchKitExtensionRequest Watchkit Uzantısı'nda openParentApplication yanıt vermiyor (Swift)

Bazı sorunlar yaşıyorum, bu noktada, yalnızca hangi bilgilerin gerçekten iletildiğinden endişelenmeden önce herhangi bir bağlantı kurmaya çalışıyorum.

işlev çağrıldığı çıktıda gösterir
let testDict = [ 
    "value1" : "Test 1", 
    "value2" : "Test 2" 
] 

@IBAction func saveButtonFunction() { 
    openParentAppForBalance(testDict) 
} 

private func openParentAppForInfo(Dict: [String: String]) { 

    WKInterfaceController.openParentApplication(testDict, 
     reply: {(reply, error) -> Void in 
      println("openParentApplication called in button function") 
    }) 
} 

fakat handleWatchKitExtensionRequest sadece alışkanlık cevap: bu yüzden şu anda benim Watchkit viewController ben şu var. Şu anda çağrılan asla AppDelegate.swift içinde aşağıdaki şekilde ayarlanmış:

func application(application: UIApplication!, handleWatchKitExtensionRequest userInfo: [NSObject : AnyObject]!, reply: (([NSObject : AnyObject]!) -> Void)!) { 

    println("we made it!") 

    var retValues = Dictionary<String,String>() 

    retValues["retval1"] = "return Test 1" 
    retValues["retval1"] = "return Test 2" 

    reply(retValues) 

} 

Ben muhtemelen ne kadar bu tüm eserlerin anlayışıma burada gerçekten temel bir şey eksik eminim, ancak herhangi bir yardım hiç Tetiklenecek olan handleWatchKitExtensionRequest'u nasıl alacağınız hakkında büyük bir memnuniyet duyuyoruz!

cevap

25

Ah, sanırım burada olan şey, kodunuzun hem doğru olması hem de gerektiği gibi çalıştığı ve burada yorumladığınız şeyin, tamamen anlaşılamayacak iki varsayımın bir örtüşmesinin bir sonucudur. Doğru ve sizi yönlendiriyor. İyi haber şu ki, kodunuz zaten çalışıyor.

Söyleyecek,

fonksiyon çağrıldığını çıktıda gösterir

... ...

Bununla Eğer demek istediğin

konsolunda mesajı görüyorsanız o

kodunuzun bu bölümü bir Swift Kapatma geçerli::, openParentApplication called in button function, daha sonra burada ne olup bittiğini var

{(reply, error) -> Void in 
     println("openParentApplication called in button function") 
} 

WatchKit Uzantınız, WKInterfaceController.openParentApplication numaralı telefonu aradığında, ana iPhone uygulamanıza, iPhone uygulamasının size veri döndürmek için kullanabileceği bir sözlük (testDict) aktarılır ve verilerin serileştirilmesini sağlar. Aynı zamanda size geçirdiğiniz kapanışa geri döner. Bu, WatchKit Uzantınızın, yanıt alındığında ileriki zamanda kendi tanımladığı kodu çalıştırmasını sağlar. testDict'daki hem döndürülen verilerin hem de openParentApplication zamanında yerel olarak erişilebilen diğer değişkenlerin bu kapatma kullanımına dahil edebilirsiniz. WatchKit Uzantınız, geri alındığında kapanıştaki kodu otomatik olarak çalıştırır. Bu nedenle, openParentApplication called in button function göründüğünde, bu, iPhone uygulamasından yanıtı yanıtının alındığını ve kapatmanın yürütüldüğünü gösterir. Bu, .Bu nedenle, gerçekten println deyimi değiştirmelisiniz sizin WatchKit test kodu olarak:

WKInterfaceController.openParentApplication(testDict, 
    reply: {(reply, error) -> Void in 
     println("Reply to openParentApplication received from iPhone app") 
    }) 

Konsolda reddedilen görmek için bekliyorduk çünkü Şimdi, oldukça anlaşılır kod fark etmedi nedeni doğru infaz oldu Bu kod iPhone app infaz edildiğini:

println("we made it!") 

Ancak Xcode aynı anda iki süreç takılarak desteklemez. Bu nedenle, WatchKit uygulamanıza eklendiğinde, iPhone uygulamanızın herhangi bir günlük mesajını göremezsiniz. IPhone uygulamanız, ekli işlem olmadığında kesme noktalarına da yanıt vermez. Bunların ikisi de arka planda çalışıp çalışmadığı (openParentApplication tarafından uyandı) veya ön planda çalıştığı (WatchKit uygulaması çalıştırıldıktan sonra simülatörde manuel olarak başlatırsanız doğrudur.) IPhone uygulama etkinliğinin etkilerini görebilirsiniz. ancak WatchKit uygulamasına bağlıyken doğrudan doğruya gözükemiyor

İlk olarak, kodunuz doğru bir şekilde çalışıyor.Test kodunuzu geçebilir ve yanıt verirken iPhone tarafındaki çalışmaların incelenmesiyle ilgili olarak WatchKit uygulamasına kısmi bir çözüm var, simülatörden WatchKit uygulamasını başlatın ve Xcode'ta X12'de Hata Ayıkla> Ekle seçeneği ... ve iPhone uygulama sürecini altında seçin için hedefleri s. Artık iPhone uygulama konsolu mesajlarınızı göreceksiniz ve iPhone uygulamanız kesme noktalarına yanıt verecektir, ancak elbette bunları WatchKit uygulama tarafından görmeyeceksiniz. Simülatörlerdeki her iki uygulama ile etkileşime girmeye devam edersiniz ve yürütme sırasında hangisine bağlı olduğunuz arasında geçiş yapabilirsiniz.

+0

Bunun için çok teşekkürler! iPhone uygulamamı olası hedefler altında seçmeme rağmen iPhone uygulamasının çıktısını bana göstermiyormuş gibi görünmüyor (aslında hiç çıktı göstermiyor) ama kısmi bir çözüm için kısmi bir çözüm üreterek '' geçerek. Description '' Göstermek istediğim her şey için cevapta bir öğe olarak geri dön ve bunları Watchkit Uzantısı çıktısında bastım. ama her şey şimdi mükemmel çalışıyor - yardım için teşekkürler! – JDevine

+0

Arka plan modunun nasıl kullanılacağına ilişkin bir kod örneği için, ana uygulamanın yanıtını göndermesinin zamanı vardır, bkz. "İzleme uygulamasından ana uygulama çağrısı" (http://stackoverflow.com/questions/30000274/calling -afile-uygulama-izleme-app/30000323 # 30000323) – vomako

+3

Önemli bir nokta: Xcode, aynı anda hata ayıklamak için birden fazla işleme ekleyebilirsiniz: Watch Kit App başlatıldıktan sonra iPhone Simulator, ana uygulamanızın üzerine tıklayın simgesi (başlatmak için) ve ardından Xcode'a geri dönün. 'Hata ayıklama' menüsündeki menü çubuğunda 'işlemek için ekle'yi seçin ve ana uygulamanızı seçin. Artık hem Watch Kit Uzantısı hem de ana uygulamanızda hata ayıklıyorsunuz! –

15

Sadece bir yan not, Xcode'ta aynı anda iki işleme ekleyebilir ve WatchKit hata ayıklaması için çok kullanışlıdır. Xcode'dan WatchKit Extension hedefinizi oluşturup çalıştırın ve simülatörde çalışmaya başlayacaktır. Simülatörde şimdi iOS uygulamanızı başlatın. Bu koşuda, Debug-> İşleme Ekleme -> [Uygulama işleminizin adı] bölümüne gidin. Artık Xcode'taki her iki işlemi de göreceksiniz ve her ikisinde de kayıt, hata ayıklama vb.

+0

Bir işlemin diğerinden ayrılması mümkün değil mi? Bir oturum sırasında işlemler arasında geçiş yapabileceğiniz, ancak aynı anda günlük ifadelerini vb. Göremediğiniz bir deneyim oldu. Belki bir şeyi özledim/son bir değişikliği kaçırdım mı? –

+0

println ("Debug") kullanırken ana uygulamadan günlük göremiyorum. Ana uygulamayı XCode Debug'a bağladıktan sonra günlükleri nasıl görüyorsunuz? – Peacemoon

+0

Gerçekten de, yukarıda açıklandığı gibi iki işlem hata ayıklama çalıştığını ve ben "openParent" kapalı zaman ben hem benim seyretmek kiti uzantısı ve arkadaşı app hem de adım atmak mümkün olduğunu doğrulayabilirim. – ericWasTaken

İlgili konular