ios 在程序中使用iCloud
注意,这里说的使用icould不是用icloud进行系统备份,那个功能不需要我们写代码,备份到icloud的东西我们也不能操作。我们指的是以下这3种icloud使用方法:
这里有3中使用方法,
Key-value 就像UserDefault,只不过保存在icloud上,使用最简单,容量非常小,1M。
iCloud Documents 保存文档用的,放在一个特定的icloud目录中,core data的icloud功能就需要开启这个选项。
CloudKit 比较新的功能,在icloud上维护了一个数据库,客户端通过网络,直接操作里面的数据。
其中,core data 的icloud功能和 cloud kit是不同的,有以下区别
It’s not the same as using Core Data with iCloud, as apps based on CloudKit have direct control over data transfer as well as the aforementioned concept of public and private databases. Unlike Core Data, CloudKit has no built-in local data persistence, so caching has to be performed by the app.
cloud kit的使用方法可以参看 iOS_8_by_Tutorials
下面我贴上一小段例子代码
- (void)viewDidLoad {
[super viewDidLoad]; CKContainer *container = [CKContainer defaultContainer];
CKDatabase *publicDB = container.publicCloudDatabase;
CKDatabase *privateDB = container.privateCloudDatabase; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"TRUEPREDICATE"]; CKQuery *query = [[CKQuery alloc] initWithRecordType:@"Establishment" predicate:predicate]; [publicDB performQuery:query inZoneWithID:nil completionHandler:^(NSArray<CKRecord *> * _Nullable results, NSError * _Nullable error) {
NSLog(@"error is %@",error);
NSLog(@"%@",results);
}]; } - (IBAction)test{ //创建一条记录的ID并指定一个唯一的名字,
CKRecordID *artworkRecordID = [[CKRecordID alloc] initWithRecordName:[self GenUUID]]; //创建一个记录对象
CKRecord *artworkRecord = [[CKRecord alloc] initWithRecordType:@"Establishment" recordID:artworkRecordID]; //设置记录字段 artworkRecord[@"name"] = @"a name added"; CKContainer *container = [CKContainer defaultContainer];
CKDatabase *publicDB = container.publicCloudDatabase;
CKDatabase *privateDB = container.privateCloudDatabase; [privateDB saveRecord:artworkRecord completionHandler:^(CKRecord *artworkRecord, NSError *error){
if (!error) {
NSLog(@"保存成功");
}
else {
NSLog(@"保存失败%@",error);
}
}]; [publicDB saveRecord:artworkRecord completionHandler:^(CKRecord *artworkRecord, NSError *error){
if (!error) {
NSLog(@"保存成功");
}
else {
NSLog(@"保存失败%@",error);
}
}];
} - (NSString *)GenUUID
{
CFUUIDRef uuid_ref = CFUUIDCreate(NULL);
CFStringRef uuid_string_ref= CFUUIDCreateString(NULL, uuid_ref);
CFRelease(uuid_ref);
NSString *uuid = [NSString stringWithString:(__bridge NSString*)uuid_string_ref];
CFRelease(uuid_string_ref);
return uuid;
} @end
注意,注意!使用上面这段代码需要设备上登录了icloud,不然会返回错误。
代码并不复杂,cloudkit的最大特点,我感觉就是那个public的数据库了。比如我有个程序,想给用户分享点新闻什么的,再也不用自己架个服务器了,直接用cloudkit 中的 public 数据库保存好信息,在客户端拉取就行了!对于个人开发者是个大大的福音啊!
ios 在程序中使用iCloud的更多相关文章
- 在iOS应用程序中使用Frida绕过越狱检测
阿里聚安全在之前的三篇博客中介绍了利用Frida攻击Android应用程序,整个过程仿佛让开发者开启上帝视角,在本篇博客中,我们将会介绍在iOS应用程序中使用Frida绕过越狱检测.即使 ...
- Delphi for iOS开发指南(8):在iOS应用程序中使用Tab组件来显示分页
Delphi for iOS开发指南(8):在iOS应用程序中使用Tab组件来显示分页 在FireMonkey iOS应用程序中的Tab Tab由FMX.TabControl.TTabControl定 ...
- Delphi for iOS开发指南(7):在iOS应用程序中使用WebBrowser组件
Delphi for iOS开发指南(7):在iOS应用程序中使用WebBrowser组件 在FireMonkey iOS应用程序中使用WebBrowser 在iOS平台上,FireMonkey使用T ...
- Delphi for iOS开发指南(6):在iOS应用程序中使用ComboBox组件来从列表中选择某一项
http://blog.csdn.net/delphiteacher/article/details/8924110 Delphi for iOS开发指南(6):在iOS应用程序中使用ComboBox ...
- Delphi for iOS开发指南(5):在iOS应用程序中使用Calendar组件来选择日期
http://blog.csdn.net/delphiteacher/article/details/8923519 在FireMonkey iOS应用程序中的Calendar FireMonkey使 ...
- Delphi for iOS开发指南(4):在iOS应用程序中使用不同风格的Button组件
http://blog.csdn.net/DelphiTeacher/article/details/8923481 在FireMonkey iOS应用程序中的按钮 FireMoneky定义了不同类型 ...
- IOS在一个程序中启动另一个程序
尽管iPhone不允许同时运行两个应用程序,我们可以从自己的应用程序中启动另一个应用程序,并且可以在应用程序之间共享数据.我们可以使用UIApplication类的openURL:方法从一个应用程序来 ...
- Xcode中iOS模拟器程序中的plist路径
Xcode6.4里写了个简单的iOS程序在模拟器中跑. 其中用到了NSUserDefaults来保存属性文件plist,那么这个文件实际路径在哪里呢?在网上搜了一下,发现几种说法(*表示当前用户名): ...
- 在iOS应用程序中打开设备设置界面及其中某指定的选项界面
摘自:http://stackoverflow.com/questions/8246070/ios-launching-settings-restrictions-url-scheme [[UIApp ...
随机推荐
- PHP中的ob_start用法详解
用PHP的ob_start();控制您的浏览器cache Output Control 函数可以让你自由控制脚本中数据的输出.它非常地有用,特别是对于:当你想在数据已经输出后,再输出文件头的情况.输出 ...
- regsvr32的使用
注册器是: DllRegisterServer 命令就是: regsvr32 不是regsrv32.
- 阿里云Nginx绑定多个域名的方法
nginx绑定多个域名,可通过把多个域名规则写一个配置文件里实现,也可通过分别建立多个域名配置文件实现,一般为了管理方便,建议每个域名建一个文件,有些同类域名也可写在一个总的配置文件里. 一.每个域名 ...
- CocoaPods版本升级
和往常一样使用CocoaPods管理一个基于FMDB的项目类库 命令行执行 $ pod install [!] The 'master' repo requires CocoaPods 0.32.1 ...
- jquery隐藏按钮
$(function () { jhbs = getQueryStringByName('jhbs'); shhbs = getQueryStringByName('shhbs'); if (shhb ...
- Android手机如何通过USB共享网络给Mac?
最近网络挂了,mac不能上网查资料,心情非常毛躁,急切寻求用mac蹭WiFi的方法. 没有找到电脑端破解WiFi密码的软件,手头的Android手机没有root,也无法查看WiFi密码--->破 ...
- Swift2.1 语法指南——高级操作符
原档:https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programmi ...
- Redis学习笔记四:独立功能之发布与订阅
客户端可以通过执行 subscribe 命令订阅一个或多个频道,每当有其他客户端向被订阅的频道发送消息时,频道所有的订阅者都会收到这条消息. 客户端还可以通过执行 psubscribe 命令订阅一个或 ...
- 服务器&域名那些事儿
购买的阿里云的服务器(ECS)和域名 请移步: 服务器&域名那些事儿 服务器&域名那些事儿2 github 博客
- Java中Runnable和Thread
java中有两种实现多线程的方式:一种是继承Thread类,一种是实现Runnable接口. 1.java启动线程为什么使用start函数呢? 在JDK的安装路径下,src.zip是全部的java源程 ...