【问题标题】:How can I override a getter on a property when using Core Data?使用 Core Data 时如何覆盖属性上的 getter?
【发布时间】:2010-12-28 04:01:06
【问题描述】:

我希望能够覆盖我的一个核心数据模型上的字符串属性上的 getter,并且在 getter 内部我需要找出该属性的值。

@interface LabTest : NSManagedObject {
}
@property (nonatomic, retain) NSString *status;
@end

@implementation LabTest

@dynamic status;

- (NSString *)status {
    NSString *tempStatus = [super valueForKey:@"status"];
    //do some checking here
    return tempStatus;
}

@end

上面的代码使进程崩溃。我尝试了一些不同的方法,但我认为它们都以无限循环结束,程序崩溃,代码为 139。

像这样在 getter 中访问核心数据成员的正确方法是什么?

【问题讨论】:

    标签: iphone objective-c core-data


    【解决方案1】:

    您是否尝试过[self primitiveValueForKey:@"status"] 而不是[super valueForkey:@"status"]

    【讨论】:

    • 这就是我要找的东西。谢谢!
    【解决方案2】:

    以防万一有人正在寻找有关如何覆盖 getter 方法并登陆此页面的更多信息...

    在您的属性定义中,您可以指定 getter 和 setter 方法,如下所示:

    @property (nonatomic, retain, getter = getterMethodName, setter = setterMethodName) NSString *someString;
    

    您可以仅指定 getter、仅指定 setter 或同时指定两者。

    【讨论】:

      【解决方案3】:

      x-code 中的托管对象创建者有一个复选框,通常仅出于此目的未选中。

      Validation Methods http://www.nwcode.com/img/ValidationMethods.png

      【讨论】:

      • 我并没有进行验证,因为我仍然想返回一个值,我只是想在某些情况下稍微改变一下。谢谢。
      【解决方案4】:

      有一个非常方便的 Xcode Snippets 菜单(Xcode 12 在右上角有一个 + 按钮)具有出色的 sn-ps 用于覆盖许多常见的 Core Data 代码,包括兼容 KVO 的访问器对象类型(getter + setter)。

      【讨论】:

        猜你喜欢
        • 2015-02-20
        • 1970-01-01
        • 2011-01-28
        • 1970-01-01
        • 2018-11-08
        • 2014-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多