2014-11-20 57 views
0

我無法找到一個簡單的方法,當我推了蘋果手錶應用程序的按鈕還沒有更新我的iPhone應用程序的視圖。簡單的方法來更新通過Apple關注應用內容

iPhone應用程序的ViewController(內側viewDidLoad中())::

我與NSUserDefaults的觀察像這樣試過

// Create and share access to an NSUserDefaults object. 
mySharedDefaults = NSUserDefaults(suiteName: "group.sharedTest") 

//Add Observer  
NSUserDefaults.standardUserDefaults().addObserver(self, forKeyPath: "test", options: NSKeyValueObservingOptions.New, context: nil) 

在Watchkit擴展InterfaceController我加入IBAction爲與此代碼的按鈕:

mySharedDefaults!.setObject("testValue", forKey: "test") 
mySharedDefaults!.synchronize() 

但是當我按下按鈕時,沒有任何反應! 如果我在我的iPhone ViewController裏面設置了一個對象,但是如果它通過應用程序更新的話,它不會有效! 有人可以幫我嗎?

回答

2

你不是幸運,因爲當你寫你的問題有沒有在iOS版SDK這個API。三天前,2014年12月10日蘋果公司發佈了iOS 8.2 beta 2 SDK,其中有兩個,對於這項任務很重要。

在WatchKit框架,WKInterfaceController

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

通過調用此方法的iOS將運行你的應用程序在後臺應用程序的AppDelegate將收到此消息

- (void)application:(UIApplication *)application handleWatchKitExtensionRequest:(NSDictionary *)userInfo reply:(void(^)(NSDictionary *replyInfo))reply. 

這是在添加第二個方法iOS SDK Beta 2(根據此問題)在UIKit Framework中,UIApplicationDelegate類。

可以使用的NSDictionary和回覆組通信的關注應用和iOS應用。

在你WKInterfaceController

- (IBAction)callPhoneAppButtonTapped 
{ 
    NSDictionary *dictionary = [[NSDictionary alloc] initWithObjectsAndKeys:@"text to display", @"key", nil]; 

    [InterfaceController openParentApplication:dictionary reply:^(NSDictionary *replyInfo, NSError *error) { 
     NSLog(@"Reply received by Watch app: %@", replyInfo); 
    }]; 
} 

,然後在您的iOS AppDelegate類

- (void)application:(UIApplication *)application handleWatchKitExtensionRequest:(NSDictionary *)userInfo reply:(void (^)(NSDictionary *))reply 
{ 
    NSLog(@"Request received by iOS app"); 
    NSDictionary *dictionary = [[NSDictionary alloc] initWithObjectsAndKeys:@"your value to return to Apple Watch", @"key", nil]; 

    reply(dictionary); 
} 

當您點擊蘋果表扣模擬器iPhone模擬器您的iOS應用將會啓動,你應該能夠在適當的地方看到NSLog。

注意

該解決方案適用於運送觀看和iOS應用程序之間的對象。 但是,如果你打算傳輸更多的數據,獲得的圖像,文件等,你應該使用Shared app group。您在Xcode項目文件中的Capabilities中設置共享應用程序組。 使用containerURLForSecurityApplicationGroupIdentifierNSFileManager類)來獲取共享組中文件的URL。

如果你想分享偏好initWithSuiteNameNSUserDefaults是你在找什麼。

+0

非常感謝您提供非常有趣的更新信息!我會盡快嘗試!不幸的是,我還沒有足夠的聲望來支持你的答案!對不起! – iVentis 2014-12-13 22:51:03

+0

很酷,沒問題:)它對你有用嗎? – lvp 2014-12-13 23:39:17

+1

我沒有時間測試它!我會盡快告訴你;) – iVentis 2014-12-14 07:46:24

0

我猜測的WatchKit擴展的應用程序,你的iPhone應用程序,是獨立運行的應用程序實例,並通知對於同一實例中。

作爲替代方案,也許你可以在iPhone上的應用程序更改特定按鍵,定期檢查一個單獨的線程的新操作,並且當它檢測到的變化產生一個通知本身。

+0

我不認爲你需要一個操作來做到這一點。爲什麼不從擴展程序發佈本地通知。 iPhone應用程序可以收到通知並讓您繼續作品。請記住在收到通知後從NotificationCenter中刪除通知,否則用戶可能會在NotificationCenter中看到它。 – sahara108 2014-11-21 09:21:31

+0

如果iPhone應用程序和擴展程序之間的通知工作,那將更容易。我曾想過,因爲共享的默認通知不適用於所有應用程序,通常情況下通知不會。但如果他們這樣做,你的建議肯定更容易。 – saward 2014-11-21 12:45:01

+1

@ sahara108這不會工作,因爲擴展和主機應用程序是兩個不同的進程,因此他們有不同的內存池,因此他們的NSNotificationCenter defaultCenter是不同的。 – lvp 2015-03-21 08:59:20

相關問題