iphone - 如何实现/增强核心数据关系 getter/setter?

标签 iphone iphone-sdk-3.0 core-data

我有一个相当复杂的托管数据模型,它有一个中心对象,其中有许多关系,这些关系取决于各种属性的值。我使用 plist 集将初始数据导入到模型中,每个 plist 指定实体类的属性,然后根据这些属性填充关系。

我想修改关系的 getter,以自动获取受属性约束的对象。这里的原因是将关系构建移入托管对象并移出导入逻辑,但我无法做到这一点,例如:

假设的子类化ManagedObject.m:

-1 #import "SubclassedManagedObject.h'
0 #import "OtherManagedObject.h"

1 @implementation SubclassedManagedObject
2 @dynamic attr1
3 @dynamic relation1  // which is an OtherManagedObject

4 - (OtherManagedObject *)relation1
5 {
6     if( relation1 != nil)
7        return relation1;

8     NSFetchRequest *request = [[NSFetchRequest alloc] init];
9     [request setEntity://the OtherManagedObject entity];
A     [request setPredicate://predicate based on attr1];

B     NSArray *results;
C     results = [[self managedObjectContext] executeFetchRequest:request//..];

D     if( [results count] )
E       relation1 = [results objectAtIndex:0];
F }

在第 6 行编译时,这个问题发生了:

error: 'relation1' undeclared (first use in this function)

在 A 行,根据 attr1 的值构建谓词:

error: 'attr1' undeclared (first use in this function)

我的问题是我想做的可能或更可能的事情,是否有更好的方法来实现这一点?

最佳答案

嗯,这很尴尬。我在Apple的documentation中找到了我的问题的答案.

因此relation1的getter的实现改为:

- (OtherManagedClass *)relation1
{
    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    [request setEntity:// the entity];
    [request setPredicate:// predicate using attr1];
    NSArray *results
    results = [[self managedObjectContext] executeFetchRequest:// ...];
    if( [results count] )
        return [results objectAtIndex:0];
    return nil;
}

我的错误是将这些属性视为传统的 ivars。

关于iphone - 如何实现/增强核心数据关系 getter/setter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1081461/

相关文章:

iphone - Objective-C 中自定义对象的分组

iphone - 通过分割 .xib 文件来减少内存使用?

iphone - OS 3.0 中的快速枚举

ios - 如何在核心数据中绘制2个实体之间的关系?

swift - 如何使用核心数据保存在写板下方(用于签名)

iphone - 最小字体大小问题

iphone - 为什么这些 "member"变量表现得像静态变量?

iphone - 如何在 NIB 中加载外部 View ?

ios - 密码保护 iPhone 应用程序

ios - 应用程序更新后无处不在的商店位置意外更改