成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

iOS App與WatchKit Extension的數據通信

移動開發 iOS Android
NSUserDefaults是快速共享信息的途徑。它適合存儲各種快速訪問和計算的小型數據,比如用戶名與檔案信息。如果希望使用UserDefaults,請用于靜態數據這樣用戶不必考慮數值的變化。

[[138318]]

NSUserDefaults

NSUserDefaults是快速共享信息的途徑。它適合存儲各種快速訪問和計算的小型數據,比如用戶名與檔案信息。如果希望使用UserDefaults,請用于靜態數據這樣用戶不必考慮數值的變化。

你需要設定App Group來讓設備通過共享容器來實現數據共享,確保手表擴展和ios target都已如此設置。基本上就是針對兩個設備創建一個統一的App Group標識符。如果需要刪除它,可以以類似的方法進行。

你可以通過之前創建的App Group名來使用defaults,基本上就是為特定的key鍵值設置對象。在iPhone上,用戶輸入了文本,保存,文本就存到了應用共享的UserDefaults里。在Watch上,你可以從AppGroup得到defaults然后進行手表顯示內容的更新。

  1. // on the iPhone app 
  2. letdefaults=NSUserDefaults(suiteName:"group.com.natashatherobot.userdefaults"
  3. letkey="userInput" 
  4.  
  5. overridefuncviewDidLoad(){ 
  6. super.viewDidLoad() 
  7. textLabel.text=defaults?.stringForKey(key)??"Type Something..." 
  8. @IBActionfunconSaveTap(sender:AnyObject){ 
  9.  
  10. letsharedText=textField.text 
  11.  
  12. textLabel.text=sharedText 
  13.  
  14. defaults?.setObject(sharedText,forKey:key) 
  15. defaults?.synchronize() 
  16. // WatchKit 
  17. classInterfaceController:WKInterfaceController{ 
  18. @IBOutletweakvartextLabel:WKInterfaceLabel! 
  19.  
  20. letdefaults=NSUserDefaults(suiteName: 
  21. "group.com.natashatherobot.userdefaults"
  22.  
  23. varuserInput:String?{ 
  24. defaults?.synchronize() 
  25. returndefaults?.stringForKey("userInput"

NSFileCoordinator

對更大型的數據來說,NSFileCoordinator是管理應用和watch擴展的共享空間里文件的方式之一。對于有限列表的內容它很合適,同時也適用于圖像文件。

下面的例子是個簡單的代辦事項列表app,在手機上增加任務然后暑假傳輸到WatchKit擴展并在手表上顯示。你的視圖控制器需要遵循NSFilePresenter協議,除了實現兩個必需方法,其它不是很關鍵。FilePresenter協議有一個item URL,就是填你的AppGroup標識符的地方。通過URL,你在對應目錄建立一個文件。有必要的話你也可以通過操作隊列來控制多線程訪問。

另外,presentedItemDidChange這個代理方法,在FilePresenter里通知你是否一個對象發生了改變,來讓你更新app數據而無需用戶手動刷新。

然而這里還是有個關于NSFileCoordinator與NSFilePresenter 的bug而不方便在擴展里使用。具體可參見Natasha的網站。

在代辦事項數組里利用FileCoordinator寫入一個文件,可以通過讀寫文件以實現打包和解包事項的數據到事項數組,接下來可以依據文件里的事項數據計算生成表格。需要注意的是如果你設計了刪除功能,而watch擴展和iPhone應用都能修改文件,會遇到線程同步的麻煩。

  1. // iPhone app 
  2. privatefuncsaveTodoItem(todoItem:String){ 
  3.  
  4. // write item into the todo items array 
  5. ifletpresentedItemURL=presentedItemURL{ 
  6.  
  7. fileCoordinator.coordinateWritingItemAtURL(presentedItemURL,options:nil,error:nil) 
  8. {[unownedself](newURL)->Voidin 
  9.  
  10. self.todoItems.insert(todoItem,atIndex:0
  11.  
  12. letdataToSave=NSKeyedArchiver.archivedDataWithRootObject(self.todoItems) 
  13. letsuccess=dataToSave.writeToURL(newURL,atomically:true
  14. // in the Watch 
  15. // MARK: Populate Table From File Coordinator 
  16.  
  17. privatefuncfetchTodoItems(){ 
  18.  
  19. letfileCoordinator=NSFileCoordinator() 
  20.  
  21. ifletpresentedItemURL=presentedItemURL{ 
  22.  
  23. fileCoordinator.coordinateReadingItemAtURL(presentedItemURL,options:nil,error:nil) 
  24. {[unownedself](newURL)->Voidin 
  25.  
  26. ifletsavedData=NSData(contentsOfURL:newURL){ 
  27. self.todoItems=NSKeyedUnarchiver.unarchiveObjectWithData(savedData)as[String] 
  28. self.populateTableWithTodoItems(self.todoItems) 

Frameworks

“If the code appears more than once, it probably belongs in a framework.(如果代碼出現超過一次,應該考慮能否放到框架里)”

-WWDC 2014, Building Modern Frameworks

框架對于業務邏輯、CoreData、可重用UI組件來說很棒。就像WWDC里說的那樣,你可以將重復代碼放到框架里。在FileCoordinator的例子里,我們獲取和讀寫文件的代碼出現了兩次,可以把它們提取到一個framework框架里。建立框架很簡單:建立新target,選擇Cocoa Touch framework,然后命名。它會在你的iOS應用里自動鏈接,因此也不要忘了在WatchKit擴展里進行鏈接。

關鍵的一點,特別是對于Swift語言來說,應該把框架認作一個API。它需要聲明為公共的(public),因為這是iOS應用和watchkit擴展共用的接口。因此如果你在建立對象類,確保public關鍵字也加上了。這樣在手機和手表應用里你導入了框架就可以訪問任何公共內容。

  1. importWatchKit 
  2. importMySharedDataLayer 
  3. classInterfaceController:WKInterfaceController{ 
  4. @IBOutletweakvarfavoriteThingsLabel:WKInterfaceLabel! 
  5.  
  6. overridefuncawakeWithContext(context:AnyObject?){ 
  7. super.awakeWithContext(context) 
  8.  
  9. letmyFavoriteThings=MySharedData().myFavoriteThings 
  10.  
  11. letfavoriteThingsString=", ".join(myFavoriteThings) 
  12. favoriteThingsLabel.setText("My favorite things are \(favoriteThingsString)"

Keychain Sharing

鑰匙鏈共享是針對更高安全性要求的數據的。UserDefaults提供的安全性不滿足時,你可以用鑰匙鏈共享來保障信息安全及跨擴展的共享能力。

WatchKit目前的一個大問題是沒有認證機制。蘋果提供了KeychainIteamWrapper的示例,但API太老不支持ARC。我推薦使用這個版本https://gist.github.com/dhoerl/1170641,它基于ARC并有清晰的接口。

根據問題是如何通過access group初始化KeychainItemWrapper。與AppGroup的概念類似,設備之間有共享空間。你在iOS和WatchKit擴展中都需要鑰匙鏈來訪問用戶數據。通過鍵值存儲體系,你設定用戶名和密碼并用同一個標識符建立同一類型的keychain項。這個例子里僅展示了當用戶填好用戶名密碼時WatchKit擴展展示數據的這一工作過程。
 

  1. // iPhone app 
  2. @IBActionfunconSaveTap(sender:AnyObject){ 
  3.  
  4. letusername=usernameTextField.text 
  5. letpassword=passwordTextField.text 
  6.  
  7. letkeychainItem=KeychainItemWrapper(identifier:"SharingViaKeychain",accessGroup:"W6GNU64U6Q.com.natashatherobot.SharingViaKeychain"
  8.  
  9. // WatchKit extension 
  10. letkeychainItem=KeychainItemWrapper(identifier:"SharingViaKeychain",accessGroup:"W6GNU64U6Q.com.natashatherobot.SharingViaKeychain"
  11.  
  12.  
  13. letpasswordData=keychainItem.objectForKey(kSecValueData)asNSData 
  14. letpassword=NSString(data:passwordData,encoding:NSUTF8StringEncoding) 
  15.  
  16. letusername=keychainItem.objectForKey(kSecAttrAccount)as?String 

 

責任編輯:chenqingxiang 來源: 艾佢K的博客
相關推薦

2021-12-23 06:57:32

數據通信Websocket

2010-09-02 19:55:35

斐訊數據通信

2022-03-15 20:41:36

全無線低碳智能樓宇網

2022-04-22 21:22:18

華為

2009-01-10 23:47:27

軟考數據通信信道

2021-10-15 12:09:27

華為

2015-04-14 09:33:17

WatchKitAPP

2015-08-13 10:15:02

WatchKitHealthKitApplePay

2015-07-20 09:16:42

iOSWatchKit開發

2014-11-20 15:44:40

Apple Watch

2015-01-21 16:35:49

Apple WatchWatchKit

2012-12-24 14:40:54

iosjs

2013-03-14 10:49:09

2018-01-02 15:34:47

2014-11-20 16:02:22

WatchKit
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲一区不卡在线 | 九色在线观看 | 在线午夜| 免费99视频 | 一区二区播放 | 在线观看免费国产 | 久久久久无码国产精品一区 | 精品国产伦一区二区三区观看说明 | 色综合久久伊人 | 久久久精品视频免费看 | 久久精品国产亚洲一区二区三区 | 国产精品久久久久久久久久 | 超碰精品在线 | 中文字幕一区二区三区乱码图片 | 蜜桃av一区二区三区 | 第四色播日韩第一页 | 国产黄视频在线播放 | 成人久久网 | 国产一区二区在线观看视频 | 色屁屁在线观看 | 中文字幕 在线观看 | 精品国产乱码久久久久久1区2区 | 国产一区二区欧美 | 国产一二三区精品视频 | 欧美电影免费观看高清 | 国产 日韩 欧美 在线 | 久久久久亚洲av毛片大全 | 99视频免费播放 | 国产精品一区二区视频 | 91精品久久久久久久久 | 色视频在线免费观看 | 亚洲一区二区三区四区五区中文 | 人人看人人射 | 日韩精品视频网 | 成人精品视频 | 国产精品视频在线播放 | 午夜成人免费视频 | 免费在线观看一级毛片 | 精品欧美一区二区三区免费观看 | a欧美| 美女天天干天天操 |