精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

CoreData遇見iCloud的那些坑

移動開發(fā) iOS
盡管蘋果把iCloud與CoreData之間的完美配合吹的天花亂墜,但在iOS7之前,想用iCloud同步CoreData數(shù)據(jù)簡直就是噩夢,蘋果自己也承認了之前的諸多bug和不穩(wěn)定性,這讓蘋果不得不重新站出來說他們的工程師已經(jīng)在iOS7中修復了bug,增強了體驗,balabala,關鍵是對于程序員來說,將iCloud集成到CoreData變得無比簡單。

盡管蘋果把iCloud與CoreData之間的***配合吹的天花亂墜,但在iOS7之前,想用iCloud同步CoreData數(shù)據(jù)簡直就是噩夢,蘋果自己也承認了之前的諸多bug和不穩(wěn)定性,這讓蘋果不得不重新站出來說他們的工程師已經(jīng)在iOS7中修復了bug,增強了體驗,balabala,關鍵是對于程序員來說,將iCloud集成到CoreData變得無比簡單。

在蘋果的官方文檔中已經(jīng)把配置工作敘述的很明確了,簡單地說可以總結為三步:

在iTunes Connect創(chuàng)建App ID,在Xcode中找到項目的Capabilities標簽并開啟iCloud選項。這會為你創(chuàng)建一個默認的iCloud容器,名字格式為“com.XXX.yourAppID”

添加NSPersistentStore時向options參數(shù)傳入一個持久存儲的名稱,自己起一個就行,示例代碼如下:

  1. NSDictionary *storeOptions = 
  2.     @{NSPersistentStoreUbiquitousContentNameKey: @"MyAppCloudStore"}; 
  3. NSPersistentStore *store = [coordinator addPersistentStoreWithType:NSSQLiteStoreType 
  4.                                                      configuration:nil 
  5.                                                                URL:storeURL 
  6.                                                            options:storeOptions 
  7.                                                              error:&error]; 

對NSPersistentStoreCoordinatorStoresWillChangeNotification,NSPersistentStoreCoordinatorStoresDidChangeNotification和NSPersistentStoreDidImportUbiquitousContentChangesNotification這三個通知進行注冊以便接收通知后對數(shù)據(jù)進行處理。***用NSNotificationCenter的addObserverForName:object:queue:usingBlock:方法來使邏輯更加明確,代碼更緊湊。

***貼上Swift實現(xiàn)persistentStoreCoordinator的代碼:

  1. var persistentStoreCoordinator: NSPersistentStoreCoordinator! { 
  2.    if _persistentStoreCoordinator == nil { 
  3.        let storeURL = self.applicationDocumentsDirectory.URLByAppendingPathComponent("HardChoice.sqlite"
  4.        var error: NSError? = nil 
  5.        _persistentStoreCoordinator = NSPersistentStoreCoordinator(managedObjectModel: self.managedObjectModel) 
  6.          
  7.        // iCloud notification subscriptions 
  8.        let dc = NSNotificationCenter.defaultCenter() 
  9.        dc.addObserverForName(NSPersistentStoreCoordinatorStoresWillChangeNotification, object: self.persistentStoreCoordinator, queue: NSOperationQueue.mainQueue(), usingBlock: { (note) -> Void in 
  10.            self.managedObjectContext.performBlock({ () -> Void in 
  11.                var error: NSError? = nil 
  12.                if self.managedObjectContext.hasChanges { 
  13.                    if !self.managedObjectContext.save(&error) { 
  14.                        println(error?.description) 
  15.                    } 
  16.                } 
  17.                self.managedObjectContext.reset() 
  18.            }) 
  19.        }) 
  20.        dc.addObserverForName(NSPersistentStoreCoordinatorStoresDidChangeNotification, object: self.persistentStoreCoordinator, queue: NSOperationQueue.mainQueue(), usingBlock: { (note) -> Void in 
  21.            self.managedObjectContext.performBlock({ () -> Void in 
  22.                var error: NSError? = nil 
  23.                if self.managedObjectContext.hasChanges { 
  24.                    if !self.managedObjectContext.save(&error) { 
  25.                        println(error?.description) 
  26.                    } 
  27.                } 
  28.            }) 
  29.        }) 
  30.        dc.addObserverForName(NSPersistentStoreDidImportUbiquitousContentChangesNotification, object: self.persistentStoreCoordinator, queue: NSOperationQueue.mainQueue(), usingBlock: { (note) -> Void in 
  31.            self.managedObjectContext.performBlock({ () -> Void in 
  32.                self.managedObjectContext.mergeChangesFromContextDidSaveNotification(note) 
  33.            }) 
  34.        }) 
  35.          
  36.        if _persistentStoreCoordinator!.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: storeURL, options: [NSPersistentStoreUbiquitousContentNameKey:"MyAppCloudStore"], error: &error) == nil { 
  37.            println("Unresolved error \(error), \(error?.userInfo)"
  38.            abort() 
  39.        } 
  40.    } 
  41.    return _persistentStoreCoordinator! 
  42. var _persistentStoreCoordinator: NSPersistentStoreCoordinator? = nil 

當然你也可以用lazy關鍵字同樣來實現(xiàn)persistentStoreCoordinator屬性的惰性加載。

已經(jīng)有人將整套CoreData集成iCloud的邏輯抽象出來,比如iCloudCoreDataStack。完全不需要再用宣稱能讓CoreData與iCloud搭配更簡單的第三方庫了,因為在iOS7中蘋果的確讓它簡單至極了。

然而當Xcode6和iOS8襲來,一個個坑爭先恐后的出現(xiàn)了。

首先是iCloud Drive,它與之前iCloud有沖突。如升級,請徹底,讓測試機器都升級iCloud Drive。

然后是Xcode6中開啟Capabilities標簽的iCloud選項卡后,如下的場景簡直是臥槽:

 

該怎么選怎么選啊?!我只能說按照上圖這么選就對了。順便說一下iCloud默認容器名稱格式已經(jīng)變成了“iCloud.com.yourname.yourAppID”,其實這也不太準確,官方稱作“iCloud.$(CFBundleIdentifier)”,后面的美元號所指的變量就是General中Identity一欄的“Bundle Identifier”值。此外“Key-value storage”和“CloudKit”選項選不選都可以,但“iCloud Documents”一定要勾選,否則是無法同步CoreData數(shù)據(jù)的。

PS:CloudKit是蘋果***推出的基于iCloud的一個云端數(shù)據(jù)存儲服務,提供了低成本的云存儲并能作為一個后端服務通過用戶們的iCloud賬號分享其應用數(shù)據(jù)。

接下來是時候檢查我們是否成功添加了iCloud容器,可以在applicationDidFinishLaunchingWithOptions方法中嘗試獲取容器的URL來判斷:

  1. let containerURL = NSFileManager.defaultManager().URLForUbiquityContainerIdentifier("iCloud.com.yulingtianxia.HardChoice"
  2. if containerURL != nil { 
  3.   println("success:\(containerURL)"
  4. else
  5.   println("URL=nil"

如果之前沒有在Capabilities標簽的iCloud中勾選“iCloud Documents”,“URLForUbiquityContainerIdentifier”方法會始終返回nil。來看看蘋果開發(fā)者論壇上關于這個話題的討論吧

PS:官方文檔不建議在主線程使用URLForUbiquityContainerIdentifier方法,因為它可能需要較長時間來返回URL而阻塞主線程。這里只是為了測試使用。

然而判斷iCloud是否真的與CoreData工作正常,蘋果的官方文檔寫的很詳細:Using the iCloud Debugging Tools

當我興致沖沖的打開Xcode中的debug navigator,點擊左邊的iCloud查看狀態(tài)時,被眼前的一切驚呆了:

 

“iCloud Usage”告訴我狀態(tài)不可用,然而右下角的日志中Using local storage已經(jīng)從1變成了0,也就是證明了我的APP(HardChoice)已經(jīng)從CoreData使用本地持久倉庫轉移到了使用“iCloud-enabled”持久倉庫。“Transfer Activity”中柱狀圖更是顯示從iCloud下載了數(shù)據(jù)。而這其實應該是Xcode6的一個bug,有人已經(jīng)在蘋果開發(fā)者論壇討論了。

根據(jù)我的測試,只勾選“Key-value storage”或者在模擬器上調試時,“iCloud Usage”都不會出現(xiàn)。而即使“iCloud Usage”出現(xiàn)了,狀態(tài)也始終是Disabled,“Transfer Activity”也不是很靈敏。唯獨只能相信CoreData的log了。

但我們可以查看“My Mac”的“iCloud Usage”而不是iPhone的“iCloud Usage”:

 

在“Documents”一欄中可以看出我在兩個設備間同步了數(shù)據(jù),“mobile”后面跟著的是我的設備編號。展開數(shù)據(jù)可以看到更詳細的同步記錄:

雖然通過“My Mac”可以看到iCloud與CoreData的數(shù)據(jù)同步記錄,但是在Xcode6.1.1中“Documents”的顯示不是很正常,在***的Xcode6.2beta版中雖然修復了“Documents”的顯示問題,但“iCloud Usage”的種種bug依然存在。

***,確保網(wǎng)絡通常。我在中軟實訓一個月時,網(wǎng)絡奇差,或是屏蔽了iCloud,一直沒能調試成功。

貼一張HardChoice同步成功的測試圖,因為我是用Swift寫的這個Demo,所以喜歡用Swift的可以直接把我的那部分源碼粘過去用:

 

責任編輯:chenqingxiang 來源: 玉令天下的博客
相關推薦

2020-04-21 15:18:11

財務信息化

2022-05-15 08:13:50

Mysql數(shù)據(jù)庫Mycat

2017-07-19 14:26:01

前端JavaScriptDOM

2021-09-07 14:35:48

DevSecOps開源項目

2013-04-12 15:59:33

2017-07-06 11:41:48

CIOIT技術

2017-03-31 10:27:08

推送服務移動

2020-05-28 16:15:50

HTTP暗坑前端

2020-03-12 15:00:44

JavaSpring依賴

2011-12-22 19:57:38

PhoneGap

2018-02-06 08:36:02

簡歷程序員面試

2017-08-28 15:30:49

Android編碼器編碼

2015-04-13 17:39:11

移動IM開發(fā)

2011-12-15 09:45:21

PhoneGap

2017-08-04 17:07:32

JavaArraysList

2016-12-28 13:19:08

Android開發(fā)坑和小技巧

2018-07-05 06:02:38

綜合布線弱電動力線

2015-07-27 09:25:45

core data

2018-03-30 09:21:30

程序員網(wǎng)絡招聘

2015-08-10 14:11:48

亞馬遜AWS中國Amazon S3
點贊
收藏

51CTO技術棧公眾號

日日骚欧美日韩| 成人国产综合| 亚洲精品3区| 欧美视频一二三| 日韩精品伦理第一区| 91日韩中文字幕| 激情小说亚洲图片| 欧美在线你懂的| 国产精品igao激情视频| 免费在线看v| 亚洲色图21p| 精品国产午夜肉伦伦影院| 色综合天天狠狠| av磁力番号网| japanese国产在线观看| 久久久久久久久久久妇女| 精品播放一区二区| 国产 porn| 国产ktv在线视频| 国产精品三级av| 久久99精品久久久久久三级| 欧美成人aaa片一区国产精品| 日韩三区视频| 无吗不卡中文字幕| 色婷婷精品国产一区二区三区| 亚洲视频一区在线播放| 国产精品毛片| 欧美国产乱视频| 中文字幕精品亚洲| 久草精品在线| 亚洲国产精品网站| 国产91在线视频观看| 黄视频在线观看网站| 久久日韩粉嫩一区二区三区 | 最近高清中文在线字幕在线观看1| 国产精品久久看| 欧美日韩在线播放一区二区| 成人免费区一区二区三区| 国产精品国产三级国产在线观看| 欧美视频精品在线观看| 精品国产一区二区三区av性色| 久精品国产欧美| 精品人妻一区二区三区换脸明星| 免费在线观看视频一区| 欧美在线亚洲在线| 日本中文字幕网| 久久男人av| 日韩午夜激情视频| 黄色片免费网址| 成人免费观看49www在线观看| 亚洲狼人国产精品| 亚洲最大免费| 国产1区在线观看| 国产一区二区三区免费观看| 91精品久久久久久久久久久| 中文字幕+乱码+中文| 丝袜诱惑制服诱惑色一区在线观看| 57pao成人国产永久免费| 久久精品国产亚洲av高清色欲| 欧美视频导航| 欧美激情第99页| 国产精品自拍视频一区| 亚洲黄色高清| 日本久久久久久久| 国产又粗又猛又黄视频| 免费久久精品视频| 成人黄色免费片| 性做久久久久久久久久| 校园激情久久| 国产91露脸中文字幕在线| 国产专区第一页| 亚洲国产精品久久久天堂| 色婷婷综合久久久久中文字幕1| 国产午夜精品久久久久久久久| 日韩电影免费网站| 精品国产亚洲在线| 五月天丁香社区| 精品视频自拍| 亚洲性xxxx| 日韩亚洲欧美中文字幕| 午夜精品电影| 91成人性视频| 免费在线观看国产精品| 国产免费一区二区三区视频| 国产精品99999| 国产精品成人一区二区三区夜夜夜 | 国产亚洲精品一区二区| 日韩免费av一区| 在线成人国产| 国产精品精品一区二区三区午夜版 | 亚洲美女视频在线| 久久这里只有精品23| 希岛爱理一区二区三区av高清| 欧美日韩黄色影视| 白嫩情侣偷拍呻吟刺激| 精品产国自在拍| 欧美成aaa人片在线观看蜜臀| 91精品国产高潮对白| 日本欧美一区二区在线观看| 99国精产品一二二线| 你懂的在线视频| 亚洲男人的天堂一区二区| 国产欧美久久久久| 凹凸成人精品亚洲精品密奴| 日韩视频免费直播| 亚洲一区二区三区四区五区六区| 欧美色图激情小说| 欧美不卡视频一区发布| 丰满人妻老熟妇伦人精品| 精品一区二区三区久久| 精品日韩美女| 美女隐私在线观看| 欧美午夜女人视频在线| 91视频福利网| 日韩欧美一区免费| 久久露脸国产精品| 国产精品区在线观看| 26uuu亚洲综合色| 久久香蕉视频网站| 成人黄色图片网站| 日韩成人av网| 九九视频免费观看| 久久草av在线| 欧美日产一区二区三区在线观看| 污的网站在线观看| 久久天堂电影| 国产精品久久久久桃色tv| 欧美在线一区视频| 日韩激情精品| xx视频.9999.com| 波多野结衣大片| av在线不卡网| 久久综合亚洲精品| 91麻豆精品国产综合久久久| 精品一区二区电影| 日本亚洲欧美在线| 国产精品亚洲专一区二区三区| 一区二区免费电影| 成人精品电影在线| 亚洲深夜福利网站| 特级特黄刘亦菲aaa级| av在线不卡顿| 国产99久久久欧美黑人| 五月婷婷开心中文字幕| 亚洲大片一区二区三区| 日韩中文字幕在线视频观看| 日韩黄色av| 欧美精品日韩三级| 国产aⅴ爽av久久久久成人| 国产精品国产三级国产普通话三级 | 中文字幕天堂网| 尤物精品在线| 国产一区在线免费| 国产伦子伦对白在线播放观看| 精品国产精品一区二区夜夜嗨| 色婷婷国产精品免| 日韩成人精品在线观看| 色噜噜一区二区| 欧美xxxx做受欧美护士| 中文字幕亚洲欧美日韩高清| 伊人久久亚洲综合| 亚洲视频一区在线| 国产chinesehd精品露脸| 亚洲调教视频在线观看| 国产一区二区免费电影| 亚洲国产成人二区| 成人午夜免费电影| 亚洲老板91色精品久久| 日本在线小视频| 久久久久久久久久久久久久久99 | 19禁羞羞电影院在线观看| 欧美大肚乱孕交hd孕妇| 国产做受高潮漫动| 久久久电影一区二区三区| www.99av.com| 亚洲国产一成人久久精品| 高清视频一区二区三区| 超碰激情在线| 亚洲天堂开心观看| 一区二区三区播放| 亚洲高清不卡在线观看| 国产精品毛片一区二区| 蜜臀av性久久久久蜜臀aⅴ流畅| 一区二区av| 国产欧美三级电影| 国产精品久久久久久久久久三级| 日本中文字幕在线视频| 精品美女一区二区三区| 中文字幕精品无| 亚洲柠檬福利资源导航| chinese麻豆新拍video| 青青草97国产精品免费观看 | 亚洲狼人综合网| 不卡av在线网| 欧美一级裸体视频| 亚洲欧美一级二级三级| 欧美xxxx黑人又粗又长密月| 日韩城人网站| 午夜精品一区二区三区av| 成年人视频在线观看免费| 国产精品久久看| 日本天堂在线播放| 日韩电影在线一区二区三区| 2022中文字幕| 精品久久久久久久久久久aⅴ| 97在线中文字幕| 高清电影一区| 性色av香蕉一区二区| 操你啦在线视频| 亚洲无亚洲人成网站77777| 国产黄频在线观看| 欧美亚一区二区| 尤物视频最新网址| 国产精品一区二区免费不卡| 日韩精品一区二区三区不卡| 韩国久久久久| 宅男在线精品国产免费观看| 曰本一区二区三区视频| 国产精品日韩欧美一区二区| 久久亚洲资源中文字| 欧美性视频网站| 久草免费在线色站| 日韩视频欧美视频| 北条麻妃在线| 国产午夜精品理论片a级大结局| 日本人成精品视频在线| 国产美女在线观看| 在线看国产精品| 黄色在线网站| 亚洲精品美女网站| 国产综合视频在线| 欧美大片一区二区| 精品久久久无码中文字幕| 777午夜精品免费视频| 国产精品无码粉嫩小泬| 欧美性xxxxx极品娇小| 日本免费观看视| 亚洲午夜av在线| 久久网免费视频| 亚洲综合视频在线| 欧美成人国产精品高潮| 一区二区三区在线免费播放| 国产精品国产精品88| 亚洲同性同志一二三专区| 快灬快灬一下爽蜜桃在线观看| 久久夜色精品一区| 亚洲午夜福利在线观看| 91色视频在线| 加勒比一区二区| 久久九九影视网| 精品人妻中文无码av在线| 日本欧洲一区二区| 天天天干夜夜夜操| 青青草成人在线观看| 91女神在线观看| 国产综合一区二区| 丰满少妇中文字幕| 豆国产96在线|亚洲| 伊人网综合视频| 丝袜美腿亚洲综合| 免费观看成人网| 性欧美又大又长又硬| 精品人伦一区二区三区蜜桃网站 | 99久久伊人精品影院| 一区二区日韩| 精品日产一区2区三区黄免费| 全国精品免费看| 日韩不卡av| 国产精品久久久久久久久妇女| 欧美日韩一区二区三区电影| 欧美精品观看| 鲁一鲁一鲁一鲁一色| 久久裸体视频| 成人不卡免费视频| 国产高清精品久久久久| xxxx黄色片| 欧美极品另类videosde| 丁香花五月激情| 亚洲成av人影院在线观看网| 久久久久99精品成人片我成大片 | 色噜噜狠狠永久免费| 国产一区二区三区观看| 一级欧美一级日韩片| 日本一区二区免费在线| 日本成人精品视频| 亚洲va韩国va欧美va| 中国女人真人一级毛片| 欧美一级视频精品观看| 日韩欧美在线番号| 久久精品国产一区二区电影| 男女污污视频在线观看| 色老头一区二区三区| 大黄网站在线观看| 国产精品成av人在线视午夜片| 欧美a在线观看| 欧美日韩视频在线一区二区观看视频| 久久免费精品视频在这里| www插插插无码免费视频网站| 久久只有精品| 绯色av蜜臀vs少妇| 国产午夜精品福利| 久久免费视频6| 欧美日韩精品二区第二页| 天堂在线观看av| www高清在线视频日韩欧美| 国产一二在线播放| 91久久久久久久| 国产麻豆精品久久| 国产3p露脸普通话对白| 久久av老司机精品网站导航| 欧美高清性xxxx| 99在线热播精品免费| 中文字幕观看av| 欧美性xxxx极品hd满灌| 韩国中文字幕hd久久精品| zzijzzij亚洲日本成熟少妇| 成人直播视频| 精品久久久久久中文字幕动漫| 91成人精品视频| 欧美三级午夜理伦三级富婆| 91麻豆精品秘密| 精品视频一区二区在线观看| 7777精品伊人久久久大香线蕉的 | 在线免费观看黄色av| 日韩成人中文字幕| 欧美96在线| 日本国产欧美一区二区三区| 成人自拍在线| 蜜臀av性久久久久蜜臀av| 蜜臀av亚洲一区中文字幕| 成人免费无遮挡无码黄漫视频| 五月综合激情网| 高h震动喷水双性1v1| 欧美成年人视频网站欧美| 一区二区三区日本视频| 图片区小说区区亚洲五月| 国产欧美日本| 亚洲男人在线天堂| 午夜天堂影视香蕉久久| 亚洲男人天堂久久| 九九久久综合网站| 95精品视频| 在线视频不卡一区二区三区| 蜜桃91丨九色丨蝌蚪91桃色| 免费观看a级片| 欧美系列日韩一区| av电影在线观看| 成人黄色片在线| 亚洲有吗中文字幕| 天天av天天操| 亚洲午夜久久久久| 免费看黄网站在线观看| 亚洲欧美日韩网| 都市激情综合| 色噜噜狠狠一区二区三区| 蜜桃在线一区二区三区| 麻豆视频免费在线播放| 欧美日韩国产精品自在自线| 日本www在线观看视频| 成人国产精品久久久| 91tv官网精品成人亚洲| 波多野结衣免费观看| 一区二区三区中文在线观看| 亚洲精品一区二区三区新线路| 久久久久久久久久国产精品| 久久精品女人天堂av免费观看| 欧美在线激情| 蜜桃一区二区三区四区| 久草福利资源在线| 日韩午夜在线影院| 咪咪网在线视频| 日本不卡在线播放| 久久福利资源站| 最近2019年日本中文免费字幕| 日本小视频在线免费观看| 国产激情一区二区三区在线观看| 亚洲国产免费看| 国产精品高清无码在线观看| 欧美日韩激情在线| 国产高清在线a视频大全| 老牛影视免费一区二区| 免费看日韩精品| 国产亚洲精品码| 亚洲天堂男人的天堂| 成人av在线播放| 成人在线免费观看av| 国产精品免费久久| 亚洲精品一级片| 国产精品91在线观看| 欧美在线首页| 四虎永久免费在线观看| 欧美一区二区日韩一区二区| 色戒汤唯在线观看| 亚洲资源在线网| av激情亚洲男人天堂| 一级黄色大片免费| 国内精品久久久久久久久| 国产成人调教视频在线观看| 99精品视频国产| 在线观看中文字幕不卡|