ios - NSManagedObject 类并创建一个 Setter 方法

标签 ios objective-c core-data nsmanagedobject

因此在常规类中,您可以覆盖类属性的 setter 方法:

-(void)setSortBy:(NSString *)sortBy {
    // Do other stuff

    _sortBy = sortBy;
}

使用 _ 可以防止方法调用自身的无限循环。

我正在尝试对 NSManagedObject 类做一些类似的事情,但它没有提供使用下划线 (_) 的选项:

-(void)setHasNewData:(NSNumber *)hasNewData {
    // update self.modifiyDate

    _hasNewData = hasNewData;
}

给我一​​个错误并建议我将 _hasNewData 替换为 hasNewData

这是应该如何完成还是会给我一个无限循环?

我希望它在我设置 hasNewData 时更新 NSManagedObject 的属性 modifyDate

最佳答案

如果 _sortBy实例变量,您的“常规类”的第一个示例就可以工作 备份 sortBy 属性(例如,默认的合成实例变量 该属性)。

但是 Core Data 属性没有实例变量支持。 覆盖核心数据访问器时,您必须使用“原始访问器”, 并触发键值观察通知:

-(void)setHasNewData:(NSNumber *)hasNewData {
    [self willChangeValueForKey:@"hasNewData"];
    [self setPrimitiveValue:hasNewData forKey:@"hasNewData"];
    [self didChangeValueForKey:@"hasNewData"];

    // do other things, e.g.
    self.modifyDate = ...;
}

更多示例可以在《核心数据编程指南》中找到。

关于ios - NSManagedObject 类并创建一个 Setter 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17955383/

相关文章:

iphone - 核心数据插入错误

ios - UITableViewController 和 ViewWillAppear 问题

ios - CoreData - 删除托管对象内的对象

objective-c - 信号量优先级控制

objective-c - 在 Linux 上编译 objective-c

ios - 有谁知道这里发生了什么?核心数据/iCloud

ios - 在 Info.plist CFBundleSupportedPlatforms 或 modplug 的 Mach-O LC_VERSION_MIN 中找不到平台系列

html - 如何使用 Swift 解码 HTML?

ios - 在 Swift 中以编程方式将应用程序置于前台

objective-c - 核心数据属性唯一性