Conventional wisdom就是说,如果CloudKit记录位于私人数据库中,则只能由该用户访问。其他用户的私有数据库是否可以通过CKRecordZoneID.ownerName访问?
但是,我发现框架中的一个API,我不明白。 CKRecordZoneID
的初始化程序需要两个参数:
zoneName
:标识记录区域的名称。该字符串只能包含ASCII字符,不得超过255个字符。要指定当前数据库的默认区域,请为此参数传递CKRecordZoneDefaultName
常量。该参数不能是nil
或空字符串。
ownerName
:创建记录区域的用户。要指定当前用户,请使用CKOwnerDefaultName
常数。如果您为此参数指定nil
或空字符串,则此方法会引发异常。
我不明白的是ownerName
参数的用途。区域在公共数据库中不可用,所以它必须用于私人区域。但是到底是什么?
在文档中还有一些其他好奇的陈述。从CKRecordZoneID
的介绍:
...私有数据库的区域只能由拥有该数据库的用户创建。
从CKContainer
:
...私有数据库的内容是可见的只有默认当前用户。
这一切都让我暗自怀疑的是,如果你的用户和区域名称得到了你的手在其他用户的私人数据库中的现有区域,你可以建立一个CKRecordZoneID
和访问它。
这是这种情况?有人试过吗?如果它不起作用,ownerName
的目的是什么?
此示例应用程序不会为自定义所有者创建任何区域。它创建的唯一自定义区域是'[[CKRecordZone alloc] initWithZoneName:self.zoneTextField.text]',它不包含'ownerName:'参数。 –