• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 使用 NSFetchedResultsController 了解 transient 属性

[复制链接]
菜鸟教程小白 发表于 2022-12-13 02:51:41 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我开始使用 Core Data 创建一个应用程序,以检索我想要使用 NSFetchedResultController 的分段表的数据,在 example 中从苹果那里有两个额外的属性。

  • 原始时间戳
  • primitiveSectionIdentifier

对于 primitiveSectionIdentifier 的情况,苹果表示

In contrast, with transient properties you specify two attributes and you have to write code to perform the conversion.

因为 sectionidentifier 是 transient 属性。 但是 timeStamp 呢?这个属性不是 transient 的,为什么会有一个原始的TimeStamp 属性?以及为什么有明确的 timeStamp setter ?

- (void)setTimeStampNSDate *)newDate {

    // If the time stamp changes, the section identifier become invalid.
    [self willChangeValueForKey"timeStamp"];
    [self setPrimitiveTimeStamp:newDate];
    [self didChangeValueForKey"timeStamp"];

    [self setPrimitiveSectionIdentifier:nil];
}

或者它可能不是真正的二传手? _timeStamp=newDate 在哪里?



Best Answer-推荐答案


CoreData 为您生成访问器。它生成“用于建模属性的公共(public)和原始 get 和 set 访问器方法”。

所以在这种情况下它已经生成了:

-(NSDate*)timeStamp;
-(void)setTimeStamp:;
-(NSDate*)primitiveTimeStamp;
-(void)setPrimitiveTimeStamp:;

“为什么有一个primitiveTimeStamp 属性?”

声明只是为了抑制编译器警告。 IE。如果您删除了该属性的声明,您会发现编译时出现警告,但代码仍会运行。 或者你也可以使用 [self setPrimitiveValue:newDate forKey"timeStamp"];

“为什么有明确的 setter 用于 timeStamp ?”

这是必需的,因为设置时间戳需要重新计算“sectionIdentifier”。这是通过将其设置为不 nil 并让 get 访问器延迟重新计算来实现的。

“_timeStamp=newDate 在哪里?”

这基本上是在 setPrimitiveTimeStamp 的自动生成实现中完成的。

来自文档的引用:

默认情况下,Core Data 为托管对象类的建模属性(属性和关系)动态创建高效的公共(public)和原始 get 和 set 访问器方法。这包括键值编码可变代理方法,例如 addObject: 和 removes:,如 mutableSetValueForKey 的文档中所述:托管对象实际上是它们所有对多关系的可变代理。

注意:如果您选择实现自己的访问器,动态生成的方法永远不会替换您自己的代码。 例如,给定一个具有 firstName 属性的实体,Core Data 会自动生成 firstName、setFirstName:、primitiveFirstName 和 setPrimitiveFirstName:。 Core Data 甚至对由 NSManagedObject 表示的实体也是如此。要在调用这些方法时抑制编译器警告,您应该使用 Objective-C 2.0 声明的属性功能,如“声明”中所述。

关于ios - 使用 NSFetchedResultsController 了解 transient 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16938764/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap