通過(guò)這種方式存入iCloud數(shù)據(jù),用法與NSUserDefaults蠻像的星爪。就是key-value的形式存入iCloud浆西。用法超簡(jiǎn)單,但是前提是你需要做一些配置顽腾。
前提配置:
1.開(kāi)發(fā)者管理平臺(tái)近零,用于程序開(kāi)發(fā)的Bundle identifier。即在管理平臺(tái)配置的App IDs抄肖。需要開(kāi)啟iCloud的相關(guān)配置久信,具體嘗試一遍就知道了,蠻簡(jiǎn)單的漓摩,照著感覺(jué)前進(jìn)吧裙士。沒(méi)錯(cuò)的
2.在 Xcode -> TARGETS -> Capabilities -> iCloud 這里選中第一個(gè)Key-value storage
到此,已經(jīng)配置完了管毙,給兩張圖
好了腿椎,現(xiàn)在使用API吧。
官方介紹
//獲取實(shí)例
NSUbiquitousKeyValueStore *store = [NSUbiquitousKeyValueStore defaultStore];
//存入數(shù)據(jù)
[store setObject:@{@"k1":@"message"} forKey:@"key"];
//獲取數(shù)據(jù)
id obj = [store objectForKey:@"key"];
NSLog(@"%@",obj);
//這里還有一個(gè)獲取所有的鍵值對(duì)的只讀屬性dictionaryRepresentation
NSLog(@"==%@",store.dictionaryRepresentation);
//清除
[store removeObjectForKey:@"key"];
/*
*有一個(gè)地方夭咬,這里所有的操作都不是及時(shí)的針對(duì)iCloud云端啃炸。
*官方有這么一句話(huà):
應(yīng)用程序?qū)懭腈I值存儲(chǔ)對(duì)象的更改最初保存在內(nèi)存中,然后由系統(tǒng)在適當(dāng)?shù)臅r(shí)間寫(xiě)入磁盤(pán)卓舵。
如果在用戶(hù)未登錄iCloud帳戶(hù)時(shí)寫(xiě)入鍵值存儲(chǔ)對(duì)象南用,則數(shù)據(jù)將存儲(chǔ)在本地,直到下一次同步機(jī)會(huì)為止。
當(dāng)用戶(hù)登錄iCloud帳戶(hù)時(shí)训枢,系統(tǒng)會(huì)自動(dòng)將您的本地磁盤(pán)上的密鑰和值與iCloud服務(wù)器上的密鑰和值進(jìn)行協(xié)調(diào)
*/
//所以 如果希望操作立馬生效托修,可以調(diào)用這個(gè)方法
[store synchronize];
//最后,還有一個(gè)通知恒界。干嘛用的睦刃,就是數(shù)據(jù)有變化了,各個(gè)端都可以接到通知十酣,例iPhone mac iPad等
//通知名:NSUbiquitousKeyValueStoreDidChangeExternallyNotification
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(storeDidChangeFunc:) name:NSUbiquitousKeyValueStoreDidChangeExternallyNotification object:nil];
到此涩拙,就完結(jié)了。
接下來(lái)耸采,是一些嘗試:
嘗試的請(qǐng)湊:先存入一些數(shù)據(jù)兴泥,然后接下來(lái)的操作中不要再有存入數(shù)據(jù)的操作
操作1:刪除應(yīng)用 -》 重新安裝應(yīng)用(不聯(lián)網(wǎng)) -》取數(shù)據(jù)
==》結(jié)果:通知不被調(diào)用,數(shù)據(jù)為空
操作2:刪除應(yīng)用 -》 重新安裝應(yīng)用(聯(lián)網(wǎng)) -》取數(shù)據(jù)
==》結(jié)果:通知調(diào)用虾宇,數(shù)據(jù)不為空
操作3:刪除應(yīng)用 -》 重新安裝應(yīng)用(不聯(lián)網(wǎng)) -》取數(shù)據(jù) -》 聯(lián)網(wǎng) -》 取數(shù)據(jù)
==》結(jié)果:通知不被調(diào)用搓彻,數(shù)據(jù)為空,通知被調(diào)用嘱朽,取到數(shù)據(jù)
操作4:清理手機(jī)iCloud備份 -》刪除應(yīng)用 -》重新安裝(聯(lián)網(wǎng)) -》取數(shù)據(jù)
==》結(jié)果:通知調(diào)用旭贬,數(shù)據(jù)不為空
操作5:刪除數(shù)據(jù)(API:remove) -》刪除應(yīng)用 -》重新安裝(聯(lián)網(wǎng)) -》取數(shù)據(jù)
==》結(jié)果:通知調(diào)用,數(shù)據(jù)不為空
操作6:刪除數(shù)據(jù)(API:remove -> synchronize) -》刪除應(yīng)用 -》重新安裝(聯(lián)網(wǎng)) -》取數(shù)據(jù)
==》結(jié)果:通知調(diào)用搪泳,數(shù)據(jù)為空
做這么多稀轨,我就想知道,數(shù)據(jù)存到云端沒(méi)岸军?奋刽?
清理iPhone iCloud備份,數(shù)據(jù)還會(huì)存在么艰赞?佣谐?
如何清理云端數(shù)據(jù)?猖毫?
猜想:
1.數(shù)據(jù)確實(shí)存到云端了台谍,通過(guò)操作1-3,推斷聯(lián)網(wǎng)情況得到數(shù)據(jù)吁断,說(shuō)明從云端去取數(shù)據(jù)了。
2.清理iCloud備份坞生,還是能夠取到數(shù)據(jù)仔役。但是可能是緩存,這一點(diǎn)蠻模糊焦躁的是己。因?yàn)閿?shù)據(jù)存儲(chǔ): 內(nèi)存 -系統(tǒng)合適時(shí)間
-》磁盤(pán) -系統(tǒng)會(huì)自動(dòng)將您的本地磁盤(pán)上的密鑰和值與iCloud服務(wù)器上的密鑰和值進(jìn)行協(xié)調(diào)
-》云端又兵。
..通過(guò)官方介紹文檔,得知通過(guò)key-value這種形式存入iCloud
的整體分配空間只有1MB,所以猜想是否用戶(hù)設(shè)備中并不能針對(duì)key-value存儲(chǔ)的數(shù)據(jù)進(jìn)行刪除沛厨,想要?jiǎng)h除只能通過(guò)API宙地,應(yīng)用內(nèi)進(jìn)行。
..而有一個(gè)現(xiàn)象逆皮,當(dāng)云端有數(shù)據(jù)的情況下宅粥,斷網(wǎng)情況重新安裝app,你會(huì)發(fā)現(xiàn)沙盒中正常的存在那幾個(gè)文件电谣。但是當(dāng)你聯(lián)網(wǎng)后(這個(gè)地方我的理解是聯(lián)網(wǎng)了秽梅,就可以訪問(wèn)iCloud云端了),你會(huì)發(fā)現(xiàn)沙盒中多出了一個(gè)文件夾SyncedPreferences剿牺,這個(gè)文件夾應(yīng)該就是系統(tǒng)自動(dòng)從云端協(xié)調(diào)到本地的
3.清理云端數(shù)據(jù) 可以使用API的remove數(shù)據(jù)企垦,但加上synchronize。如果你想及時(shí)知道數(shù)據(jù)是否被清理掉了