是否可以通过CKRecordZoneID.ownerName访问其他用户的私人数据库?

时间:2015-11-02 03:50:07

标签: ios cloudkit

Conventional wisdom是,如果CloudKit记录在私有数据库中,则只能由该用户访问。

但是,我在框架中发现了一个我不理解的API。 CKRecordZoneID的初始值设定项有两个参数:

  

zoneName:标识记录区域的名称。该字符串必须仅包含ASCII字符,且不得超过255个字符。要指定当前数据库的默认区域,请为此参数传递CKRecordZoneDefaultName常量。此参数不能是nil或空字符串。

     

ownerName:创建记录区域的用户。要指定当前用户,请使用CKOwnerDefaultName常量。如果为此参数指定nil或空字符串,则此方法将引发异常。

我不明白的是ownerName参数是什么。区域在公共数据库中不可用,因此必须用于私有区域。但到底是什么?

文档中还有其他一些好奇的陈述。来自CKRecordZoneID的介绍:

  

...私有数据库中的区域只能由拥有该数据库的用户创建

来自CKContainer

  

...私人数据库的内容仅对当前用户默认可见。

所有这些让我怀疑,如果你掌握了另一个用户的私人数据库中现有区域的用户名和区域名,你可以构建一个CKRecordZoneID并访问它。

是这样的吗?有人试过吗?如果它不起作用,ownerName的目的是什么?

2 个答案:

答案 0 :(得分:1)

创建记录区(仅限私有数据库中)时,您只能将创建者的用户记录名称用作ownerName或更好CKCurrentUserDefaultName({ {1}}已弃用)因为创建者(即当前用户)是所有者。

共享数据库查询/订阅更改时,记录区域的所有者可以与当前用户不同。因此,您可以通过指定区域名称和所有者名称来初始化记录区域ID,然后使用记录区域ID执行查询/订阅。

我还没有尝试使用CloudKit进行共享,如果我的理解不正确,请纠正我。

答案 1 :(得分:0)

我认为这个子类别的目的是'这样,特定用户可以通过使用文档引用为" ownerName"的简单文本字符串来区分每个区域,从而在其私有数据库中创建多个区域。这似乎是示例代码在这里做的事情:

https://developer.apple.com/library/ios/samplecode/CloudAtlas/Listings/iOS_CloudKitCatalog_AAPLCKRecordViewController_m.html#//apple_ref/doc/uid/TP40014599-iOS_CloudKitCatalog_AAPLCKRecordViewController_m-DontLinkElementID_26