- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Swift 中的 CKRecord
类规范说明使用 setObject:forKey:
来设置 CKRecord
的值。但是我看到了很多带有 setValue:forKey:
的代码示例,它是 NSValueCoding
协议(protocol)的一部分。那么有人可以解释一下两者之间的优势是什么吗?
最佳答案
不幸的是,setValue:
非常经常被误用。
简单规则:
为键/值集合类型中的键设置对象的指定方法是setObject:
或键订阅。
setValue:
是一种具有特殊含义的key-value编码方式。例如,您可以用一行同时设置数组中所有字典(或自定义对象)的相同属性。 setValue:
也可用于通过文字键而不是使用适当的 setter 来设置自定义类中的属性。
例如语法
object.name = "foo"
和
object.setValue("foo", forKey:"name")
基本相同。
使用 setValue:
的一个异常(exception)是 NSManagedObject
,因为这个类严重依赖键值编码。
编辑:
总结(直接引用rmaddy的精彩评论,谢谢):
仅当您明确需要使用键值编码时才使用 setValue:forKey:
。
关于swift - CKRecord 设置值 :forKey or setObject:forKey,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37643743/
我想像文档显示那样使用下标运算符:myRecord[@"firstName"] = @"Jacob"; 但无法让它在 Swift 中工作。 知道为什么吗? 最佳答案 在这篇文章中,您可以看到为什么订阅
我写了下面的代码来共享一个 CKRecord: CKRecordZone *restaurantsZone = [[CKRecordZone alloc] initWithZoneName:@"Res
在公共(public)数据库上查询: let pred = NSPredicate(format: "family == %@", ref) let query = CKQuery(recordTyp
假设我在私有(private) CloudKit 数据库中有 A 类型的记录。如何在不指定记录 ID 或查询谓词的情况下获取该类型的 ALL 记录? 最佳答案 CKQuery 在初始化时需要一个非 n
如何在客户端以编程方式从我的数据库中删除 CKRecord。 for record in records { if recordNumber 13 { // DELETE R
我无法保存已保存的记录。 recordToSave 是从服务器下载的 CKRecord。可以更新吗? recordTosave.setValue("cat", forKey: "animal") le
我正在尝试根据用户的用户名获取用户的值。我能够使用以下方法获得正确的用户: class func getByUsername(username: String, callback: (records:
我有几个可编码的结构,我想创建一个通用协议(protocol)来将它们编码为 CloudKit 的 CKRecord 并解码回来。 我有一个用于创建字典的 Encodable 扩展: extensio
所以我遇到了一个非常奇怪的问题,我想我要么不了解 CloudKit 在后台是如何工作的,要么我在 CloudKit 中遇到了一个错误。 所以,问题看起来像这样: 应用初始状态: 我有 5 条“包裹”记
我需要迁移记录,因为“CKFetchRecordChangesOperation”不适用于默认记录。我应该一个一个地迁移它还是有什么方法可以自动迁移? 最佳答案 是的,需要一项一项的完成。您需要从旧区
在我的应用程序中,我有数百个电影对象作为CKRecord,在检索它们后将其放入数组中。例如,我希望有一种方法来检查数组是否包含标题为“泰坦尼克号”的电影记录。 到目前为止我所做的就是像这样循环数组:
因此,我正在创建一个将大量重复使用某些记录的应用程序,因此我想出了一个想法: import CloudKit class Class: CKRecord { override init
我所做的就是: if let id = record.lastModifiedUserRecordID { publicDatabase.fetch(withRecordID: id) { r
我使用以下代码在自定义私有(private) CKRecordZone 中创建 CKRecord: let noteZoneID = CKRecordZone.ID(zoneName: CloudKi
有没有办法从CKRecord中删除对象/键?它在某种程度上就像一个 NSDictionary ,但我相信没有可用的方法来完成这项任务。与 NSDictionary 不同,我们有 - (void)rem
我有一个自定义类,我用它制作了一个 (swift-y) 结构 NSCodable。现在我想将其转换为 CKRecord 以便使用 CloudKit。尽管我在对我的结构进行编码时设置了“键值”对,但据我
我认为将包含信息的基本数据对象定义为 CKRecord 可能是个好主意,因为我显然会使用 CloudKit。但是,我不知道如何创建一个 CKRecord 类。特别是,我不知道如何定义它的“record
我正在尝试在 CKRecord 上设置父项。基本上,提醒是列表的子项。该列表已存在于服务器上。 let record = CKRecord(recordType: "Reminder", record
我目前正在开发一个 iPhone 应用程序,它利用 CloudKit 在用户设备之间同步应用程序数据。我使用 CoreData 作为我的本地缓存,以确保该应用在设备离线时仍然可用。 问题 在开发过程中
我正在寻找保存 CKRecord 时正确处理错误的示例。根据Apple docs我应该“使用错误对象中的信息来确定问题是否有解决方法。” 我知道错误对象有一个 userInfo 字典,但我如何找出字典
我是一名优秀的程序员,十分优秀!