gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 20:50:15 25 4
gpt4 key购买 nike

我有一个相当复杂的托管数据模型,它有一个中心对象,其中有许多关系,这些关系取决于各种属性的值。我使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com