zoukankan      html  css  js  c++  java
  • 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 数据库保存好信息,在客户端拉取就行了!对于个人开发者是个大大的福音啊!

    https://developer.apple.com/library/prerelease/tvos/documentation/General/Conceptual/iCloudDesignGuide/Chapters/Introduction.html#//apple_ref/doc/uid/TP40012094-CH1-SW1

  • 相关阅读:
    [20190415]10g下那些latch是共享的.txt
    [20190415]11g下那些latch是共享的.txt
    [20190409]pre_page_sga=true与连接缓慢的问题.txt
    [20190402]Library Cache mutex.txt
    scrapy简单使用方法
    PHP多进程系列笔(转)
    RdKafka文档翻译
    python判断字符串中是否包含子字符串
    python 逐行读取txt文件
    redis使用watch完成秒杀抢购功能(转)
  • 原文地址:https://www.cnblogs.com/breezemist/p/5015559.html
Copyright © 2011-2022 走看看