iOS網絡編程-iCloud鍵值數據存儲編程實例
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:
NSUbiquitousKeyValueStoreDidChangeExternallyNotification
object:store
queue:nil
usingBlock:^(NSNotification *note) { ③
//更新控件狀態
[_switchSound setOn:[store boolForKey:UbiquitousSoundKey]]; ④
[_switchMusic setOn:[store boolForKey:UbiquitousMusicKey]]; ⑤
UIAlertView *alert = [[UIAlertView alloc]
initWithTitle:@”iCloud變更通知”
message:@”你的iCloud存儲數據已經變更”
delegate:nil
cancelButtonTitle:@”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_關東升
最後更新:2017-04-03 19:06:48



