iOS SwiftUI云存储之CloudKit是什么如何用
iCloud帐户
iCloud帐户是CloudKit的骨干。除了浏览公共数据(稍后将进行讨论)外,您所做的任何事情都需要登录帐户。这给我们带来的好处是无需开发我们自己的身份验证层即可访问数亿用户。此外,iCloud帐户和CloudKit可以无缝地一起工作,因此,如果最终用户已经登录到其iCloud帐户,则不会要求他们登录到该应用程序。他们可以开始使用它并创建记录。
Containers
与大多数Apple技术一样,CloudKit围绕Containers的概念发展。Containers容器为应用程序的唯一标识提供了一种方法。使用CloudKit,您始终拥有一个默认Containers容器;此外,您的应用可以访问您有权访问的其他容器。能够访问其他容器使应用程序之间可以共享数据。默认容器是
与包标识符相同。重要的是要记住,一旦有了CloudKit容器
创建后就无法删除,因此请确保您的捆绑包标识符是您计划永久使用的标识符。容器在所有开发人员中必须唯一。学习CloudKit时的一个好习惯是选择一个将用于所有测试应用程序的标识符。然后,每当您想要使用该标识符创建新应用时,都可以通过CloudKit仪表板重置开发环境。 (我们将在稍后介绍。)
将容器视为只有您的应用可以访问的沙箱。每个使用CloudKit的应用程序都有自己的沙箱。这样可以防止应用覆盖彼此的数据,并确保您的数据安全并确保其他开发人员永远无法访问它们。
容器作为CKContainer公开:
let container = CKContainer.defaultContainer()
Database
CloudKit为我们提供了对两个不同数据库的访问权,每个客户端应用程序都可以访问的公共数据库,以及仅用于访问CloudKit的帐户可以访问的私有数据库。重要的是要记住,我们作为开发人员无法访问最终用户的私有数据库。公共数据库资源成本由开发人员的支付,而私有数据库资源成本与由用户的支付。
对于公共类应用程序,我们会将数据存储在公共数据库中,以便其他用户可以查看它。
数据库公开为CKDatabase。您可以通过CKContainer访问数据库:
let publicDatabase = CKContainer.defaultContainer().publicCloudDatabase
let privateDatabase = CKContainer.defaultContainer().privateCloudDatabase
您可以在CloudKit仪表板中为公共数据库创建访问角色和权限。
Records
记录
CKRecord是包装键-值对的结构数据,其中每个值都有一个记录类型。开发人员模式下的记录使用即时模式。当您进入生产环境时,数据不会被用作即时数据。这意味着在开发应用程序时,您可以根据需要任意更改数据结构。但是,一旦您的应用程序移至生产数据库中,您将无法再更改数据结构。
支持的记录类型为NSString,NSNumber,NSData,NSDate,CLLocation,CKReference,CKAsset;记录也可以是数组,而不是单个记录类型:
let park = CKRecord(recordType: "Park")
// Setting values
park.setObject("Lafarge Lake", forKey: "name") park["location"] = "Vancouver, BC"
// Accessing values
var name = park.objectForKey("name")
var location = park["location"]
Record Zones
记录在记录区域内分组。可以有多个记录区。每个容器都有一个默认的记录区。
Record Identifiers
CKRecordID包含recordName和CKRecordZoneID。如果您不提供CKRecordZoneID,则默认记录区将被使用。如果您不提供recordName,则会为您创建一个默认名称。
References
CKReference允许您将CKRecord相互关联。创建引用时,应使用反向引用。
Assets
CKAsets用于存储大文件,例如图像或视频,并存储为大容量存储。 CloudKit会为您有效地上传和下载资产。资产由CKRecords拥有,并作为磁盘上的文件传输。
let photoURL = NSURL(fileURLWithPath: "...") let parkThumbnail = CKAsset(fileURL: photoURL) park["thumbnail"] = parkThumbnail
Convenience API
您可以在公共或私有数据库上使用带有带有completeHandler调用的saveRecord来保存记录。这是一个异步方法调用,因此请合理优雅处理数据。
1、保存数据
// Create a record ID or allow CloudKit to create a
// random one for you.
let recordID = CKRecordID(recordName: "vanLostParkID")
// Create a new record using the RecordID if created
let park = CKRecord(recordType: "Park", recordID: recordID) // Choose either the public or private database where you // want to save the record
let publicDatabase = CKContainer.defaultContainer().publicCloudDatabase
// Use the convience API saveRecord with completionHandler publicDatabase.saveRecord(park) { (savedPark: CKRecord?, error: NSError?) -> Void in
// Handle any errors when error != nil }
2、获取数据
// Fetching a record from CloudKit
// Use a predetermined CKRecordID
let recordID = CKRecordID(recordName: "vanLostParkID") // Choose either the public or private database where // you want to save the record
let publicDatabase = CKContainer.defaultContainer().publicCloudDatabase
// Use the convenience API fetchRecordWithID
// and completionHandler
publicDatabase.fetchRecordWithID(recordID) { (park: CKRecord?, error: NSError?) -> Void in
// Handle any errors when error != nil }
3、查询、修改、保存数据到CloudKit
// Fetching a record from CloudKit
// Use a predetermined CKRecordID
let recordID = CKRecordID(recordName: "vanLostParkID")
// Choose either the public or private database
// where you want to save the record
let publicDatabase = CKContainer.defaultContainer().publicCloudDatabase
// Use the convenience API fetchRecordWithID
// and completionHandler
publicDatabase.fetchRecordWithID(recordID) { (fetchedPark: CKRecord?, error: NSError?) -> Void in
// Handle any errors when error != nil if error != nil {} else {
// Modify the fetched park
fetchedPark!["name"] = "Updated Park Name"
// Save the modified park back to CloudKit publicDatabase.saveRecord(fetchedPark!, completionHandler: { (savedPark: CKRecord?, error: NSError?) -> Void in
// Handle any errors when error != nil })
} }
推荐
基础文章推荐
- 《SwiftUI是什么,听听大牛们如何说》
经典教程推荐
- onevcat 大神的《SwiftUI 与 Combine 编程》
- 更新近百篇SwiftUI教程《SwiftUI2020教程》
- 帮您突破数据存储难关《SwiftUI vs CoreData数据存储解决方案》
技术源码推荐
推荐文章
CoreData篇
- SwiftUI数据存储之做个笔记App 新增与查询(CoreData)
- SwiftUI进阶之存储用户状态实现登录与登出
- SwiftUI 数据之List显示Sqlite数据库内容(2020年教程)
Combine篇
- 一篇文章学懂弄通SwiftUI与Combine(含轮播动画App源码)
TextField篇
- 《SwiftUI 一篇文章全面掌握TextField文本框 (教程和全部源码)》
- 《SwiftUI实战之TextField风格自定义与formatters》
- 《SwiftUI实战之TextField如何给键盘增加个返回按钮(隐藏键盘)》
- 《SwiftUI 当键盘出现时避免TextField被遮挡自动向上移动》
- 《SwiftUI实战之TextField如何给键盘增加个返回按钮(隐藏键盘)》
JSON文件篇
- SwiftUI JSON文件下载、存储、解析和展示(代码大全)
一篇文章系列
- SwiftUI一篇文章全面掌握List(教程和源码)
- 《SwiftUI 一篇文章全面掌握TextField文本框 (教程和全部源码)》
- SwiftUI一篇文章全面掌握Picker,解决数据选择(教程和源码)
- SwiftUI一篇文章全面掌握Form(教程和源码)
- SwiftUI Color 颜色一篇文章全解决
技术交流
QQ:3365059189
SwiftUI技术交流QQ群:518696470
- 请关注我的专栏icloudend, SwiftUI教程与源码
https://www.jianshu.com/c/7b3e3b671970
http://www.taodudu.cc/news/show-5218268.html
相关文章:
- [shiro] - 加入rememberMe功能
- 【shiro】UsernamePasswordToken中char[]替代String的安全性
- Windows API(三)线程
- 08.音频系统:第003课_Linux音频驱动程序:第005节_DAPM_widget_route_path
- 使用ansible自动化搭建LNMP应用平台
- ios怎么引入masonry_iOS自动布局——Masonry详解
- python函数打上去说未定义_Python:名称未定义错误,即使函数被明确定义为b
- PCA(主成分分析)方法数据降维、重构和人脸识别
- ssm进行shiro认证步骤
- nWidart/laravel-modules作者对多模块开发的官方解读
- Linux内核4.14版本——alsa框架分析(11)——DAPM(2)——widget、route和path的概念
- Android ContentProvider 完全解析及简单DEMO
- PCA主成分分析应用于人脸识别的MATLAB实现
- gdb --- Convenience Variables
- 电源模式的概述
- convience
- 【n次归并操作】瑞士轮
- Bailian4031 瑞士轮【比赛成绩计算】
- openjudge 瑞士轮
- NOIP2011普及组 瑞士轮
- 前端常用的组件库
- 用VAB批量修改word图片尺寸
- Echarts中 vab-chart 以全局组件使用时,获取Echarts实例,使用this.myChart.setOption ()
- excel自带有vba手册吗_使用VAB打开Excel内置对话框
- 后台框架(一)文件1
- 使用PIAB和VAB实现业务实体的自动验证
- java vab_Excel VBA函数到Java poi
- pycharm定义空的二维数组_Excel VAB入门(二)数组和字典
- Android 虚拟分区详解(一) 参考资料推荐
- AutoCAD VAB使用SendCommand命令
iOS SwiftUI云存储之CloudKit是什么如何用相关推荐
- iOS iCloud云存储数据
https://www.jianshu.com/p/ce8cfaf6030e 2017.11.29 16:05* 字数 452 阅读 302评论 0喜欢 1 因为上一次做了用keychain来持久化存 ...
- 企业云存储云办公方案
云存储.云计算最近一直被炒得很热,成为了一部分人文档中既神秘又华丽的辞藻,总之来总之去就是"云里来雾里去",其实"云技术"与历史上的"纳米技术&quo ...
- 哪种云存储服务最适合你?
早在2007年的时候,Dropbox首席执行官Drew Houston实在受不了经常弄丢USB驱动器,个人和小公司云存储这个概念还是很前卫的想法.而如今,每个人似乎都在提供便宜或免费的云存储服务. 这 ...
- 用云存储30分钟快速搭建APP
背景 不管你承认与否,移动互联的时代已经到来,这是一个移动互联的时代,手机已经是当今世界上引领潮流的趋势,大型的全球化企业和中小企业都把APP程序开发纳入到他们的企业发展策略当中. 但随着手机APP上 ...
- 云存储领域的那些安全难题与解决途径
[51CTO.com快译]云存储供应商无法为全部IT管理员提供理想的方案平衡点,但配合第三方选项则能够有效解决问题. 云存储具备诸多优势,其可帮助IT部门以集中方式管理.保护及备份企业文件.另外,其亦 ...
- 利用Bdrive打造个人私有云存储解决方案
Bdrive 一款私有云储存软件,可以自己方便的在 Mac/Windows 下架设服务器,并可以通过 PC.Mac.iOS.Android 跨平台使用.以下简单介绍一下利用Bdrive来完成个人私有云 ...
- IT巨头互掐云存储:Dropbox能否一马当先
随着北京时间4月25日Google Drive横空出世,微软也迫不及待的发布了SkyDrive的大量更新.各大巨头进军云存储市场,激烈角逐的意向已经昭然可见.网友针对此事纷纷发表热议.苹果.微软.谷歌 ...
- Dropbox 官方中文版!最优秀实用的免费跨平台文件网络同步网盘云存储服务
很不幸的,昨晚发现我的台式机又死机了,硬盘灯不闪烁,Num lock键也无任何反映,强行重启电脑后经过一段时间的磁盘扫描检测后,总算正常进入系统了,发现系统运行速度正常,初步判断盘符和文件均无丢失,有 ...
- 380免费云存储_从四个方面分析:云存储服务的特点、影响
云存储就是将储存资源放到云上供人存取的一种新兴方案,使用者可以在任何时间.任何地方,透过任何可连网的装置连接到云上方便地存取数据.那么,云存储服务有什么特点,会给我们带来一些什么样的影响呢? 云存储是 ...
最新文章
- 深入剖析ISAServer 网页缓存及配置
- tradingview Vue
- 互联网日报 | 1月18日 星期一 | 北京超10万滴滴司机预约接种疫苗;李子柒入驻饿了么;蔚来计划2021年在海外实现销售...
- 织梦charset.func.php,织梦程序百度php主动推送代码,亲测可用!
- GetBitmapBits和GetDIBits的区别(Windows GDI)
- showModalDialog 的重要提示
- 阐述游戏关卡设计中的色彩理论
- 数据分析几大常见效应和定律。
- python 路由追踪_tracert跟踪路由
- java程序读取文件_java,编写一个程序,可以读取文件数据
- CryEngine 动态添加模型
- d435i 深度相机运行踩坑大合集
- 这个社交聊天 App 开源了!
- 福斯数据服务平台产品白皮书
- 【历史上的今天】10 月 26 日:NetBSD 系统发布;Windows 8 诞生;微软推出 Surface 系列
- Python爬虫爬取百度贴吧的帖子
- 耶鲁大学的心态 ,送给正在奋斗的人!
- 淘宝平台自研系统入驻流程
- 脱机外挂的命令大揭秘
- 最具影响力的十大扫地机器人品牌
热门文章
- 定制段码液晶屏,不的不了解的知识!
- Folx Pro for mac 5.19 Mac平台最好的下载神器中文版
- ORA-01078: failure in processing system parameters LRM-00109: could not open parameter file 解决过程
- idea继续中断的下载【小技巧】
- redis cluster使用pipeline
- 指定类型和坐标系的海报合成图片vue-canvas-poster
- Chapter 5 Blood Type——31
- 服务器开发系列(五)——服务器运维
- 支付宝蜻蜓刷脸支付设备再次来袭
- 懒猫社长新便民工程119模式升级:践行“便利店+”战略,推进多元化产业链构建