2015-02-23 81 views
5

如果在客户端上生成recordName,它可以提供更加流畅的用户体验。如果CKRecordID.recordName是在客户端上生成的任何缺点?

var uuid = NSUUID().UUIDString 

你知道有什么缺点吗?

+0

好主意!那样有用吗?这确实可以加速某些情况。 – 2015-02-24 06:50:54

+1

它的工作原理,有时它可以加快事情的速度,也就是说,如果我想在客户端上的所有字段都被填充时显示内容,那么也适用于'recordName'的字段,那么不需要等待审批表格服务器 – 2015-02-25 12:29:19

+0

做这个?我尝试设置记录.RecordID,但那是只读的。当我尝试设置record.setValue(recordId.recordName,forKey:“RecordID”)时,我得到RecordID为保​​留关键字 – 2015-02-27 14:05:09

回答

4

recordName始终在客户端上生成。

如果您的应用程序未提供recordName,则CloudKit框架将在将其发送到服务器之前在客户端生成一个UUID。

在您自己的代码中生成UUID没有任何提速,而让CloudKit框架为您生成了一个UUID。

存在客户端创建的recordName以帮助您的应用程序将CloudKit记录映射到您自己的本地数据存储。如果您不需要这样做,那么您可以将其留给CloudKit。

+1

由于保存操作是异步操作,您将能够在回调返回之前知道id。因此,您可以保存并忘记并仍然使用该ID。您也可以预先定义多个对象,而不必先保存它们。 – 2015-02-25 12:32:46

+2

谢谢,你是对的。我专注于网络性能。定义您自己的recordName会让您知道保存完成之前的ID。 – farktronix 2015-02-25 17:17:18

+0

如果你可以称之为例外,那就是当你没有“拥有”记录时 - 即,我在想'CKUserIdentity.userRecordID',它代表一个iCloud账户持有人,并且不是由你生成的。如果您的模式是围绕UUID构建的(如果使用'uuidString'构造,必须采用8-4-4-12格式),那么这可能会导致您陷入循环[我从严酷的经历中讲述]。 – AmitaiB 2016-10-16 13:48:12

1

这应该完全是给定的CKRecordID构造函数的设计目的。

只要您不尝试将相同的生成ID插入多个记录(这可能会强制您添加更多的错误处理),我看不到任何缺点。

相关问题