iCloud索引值資料存放區設計
iCloud索引值資料存放區編程執行個體,畫面中有兩個開關控制項,左圖是裝置1點擊“設定iCloud資料”按鈕,將控制項狀態儲存到iCloud伺服器。右圖是裝置2畫面,過幾秒鐘後裝置2收到變更通知。
配置Xcode工程
使用Xcode建立一個iOS工程,工程建立好之後,選擇TAGETS→MyNotes→Summary→Entitlements,我們可以在這裡配置授權資訊。
然後我們還需要應用設定程式碼簽署標識,程式碼簽署標識需要選擇這個配置概要檔案的。選擇TAGETS→MyNotes→Code Signing Identity
設定完成之後可以開始編碼工作了。
代碼實現
首先是需要註冊NSUbiquitousKeyValueStoreDidChangeExternallyNotification通知,並同步資料,代碼參考ViewController.m的viewDidLoad方法:
- (void)viewDidLoad{[super viewDidLoad];NSUbiquitousKeyValueStore* store = [NSUbiquitousKeyValueStore defaultStore]; ①[[NSNotificationCenter defaultCenter] ②addObserverForName:NSUbiquitousKeyValueStoreDidChangeExternallyNotificationobject:storequeue:nilusingBlock:^(NSNotification *note) { ③//更新控制項狀態[_switchSound setOn:[store boolForKey:UbiquitousSoundKey]]; ④[_switchMusic setOn:[store boolForKey:UbiquitousMusicKey]]; ⑤UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@”iCloud變更通知”message:@”你的iCloud儲存資料已經變更”delegate:nilcancelButtonTitle:@”Ok”otherButtonTitles:nil, nil];[alert show];}];[store synchronize]; ⑥//初始化控制項狀態[_switchSound setOn:[store boolForKey:UbiquitousSoundKey]]; ⑦[_switchMusic setOn:[store boolForKey:UbiquitousMusicKey]]; ⑧ }
儲存資料到iCloud儲存,代碼ViewController.m的setData:方法:
- (IBAction)setData:(id)sender {NSUbiquitousKeyValueStore* store = [NSUbiquitousKeyValueStore defaultStore];//儲存到iCloud[store setBool:_switchSound.isOn forKey:UbiquitousSoundKey];[store setBool:_switchMusic.isOn forKey:UbiquitousMusicKey];[store synchronize];
}
因為是BOOL值所以儲存使用的方法是setBool:forKey:。最後不要忘記解除註冊的通知,在視圖控制器中解除通知可以在didReceiveMemoryWarning方法中完成:
- (void)didReceiveMemoryWarning {[super didReceiveMemoryWarning];[[NSNotificationCenter defaultCenter] removeObserver:self];}
由於本應用中只有一個通知,因此可以使用[[NSNotificationCenter defaultCenter] removeObserver:self]語句解除全部通知,而不影響其它的通知,如果還有其它的通知我們要慎用這個語句。
編程完成代碼我們可以測試一下,這個應用的測試很麻煩,需要兩個真實裝置而不能在模擬器上進行。運行兩個裝置,點擊其中一個裝置的“設定iCloud資料”按鈕,過幾秒鐘後另外一個裝置收到變更通知。
出自《iOS網路編程與雲端應用最佳實務》作者:關東升 新浪微博@tony_關東升