Iphone 核心数据NSFetchRequest还获取实体的子对象

Iphone 核心数据NSFetchRequest还获取实体的子对象,iphone,ios,core-data,Iphone,Ios,Core Data,我不熟悉iOS开发和核心数据。我有一个父对象 @class Units; @interface Properties : NSManagedObject @property (nonatomic, retain) NSString * descr; @property (nonatomic, retain) NSString * address; @property (nonatomic, retain) NSString * city; @property (nonatomic, retai

我不熟悉iOS开发和核心数据。我有一个父对象

@class Units;
@interface Properties : NSManagedObject

@property (nonatomic, retain) NSString * descr;
@property (nonatomic, retain) NSString * address;
@property (nonatomic, retain) NSString * city;
@property (nonatomic, retain) NSString * state;
@property (nonatomic, retain) NSString *zipCode;
@property (nonatomic, retain) NSString * imageKey;
@property (nonatomic, retain) NSString * numberOfUnit;
@property (nonatomic, retain) NSData * thumbnailData;
@property (nonatomic, strong) UIImage * thumbnail;
@property (nonatomic) double orderingValue;
@property (nonatomic, retain) NSSet *units;
还有一个孩子:

@class Properties;

@interface Units : Properties

@property (nonatomic, retain) NSString * unitDescr;
@property (nonatomic) int16_t unitNumber;
@property (nonatomic, retain) Properties *property;
使用此方法获取父属性以在tableview中显示父属性对象时:

- (void)loadAllItems
{
    if (!allItems) {
        NSFetchRequest *request = [[NSFetchRequest alloc] init];

        NSEntityDescription *e = [[model entitiesByName] objectForKey:@"Properties"];
        [request setEntity:e];

        NSSortDescriptor *sd = [NSSortDescriptor
                                sortDescriptorWithKey:@"orderingValue"
                                ascending:YES];
        [request setSortDescriptors:[NSArray arrayWithObject:sd]];

        NSError *error;
        NSArray *result = [context executeFetchRequest:request error:&error];
        if (!result) {
            [NSException raise:@"Fetch failed"
                        format:@"Reason: %@", [error localizedDescription]];
        }

        allItems = [[NSMutableArray alloc] initWithArray:result];
    }
}
我遇到了一个问题,核心数据上下文获取父实体的子对象。我只想返回父对象

例如,如果我有一个具有3个单位的属性,则properties tableview应该只显示1行,但它显示4行(1个父对象和3个子对象)

如何返回父对象

谢谢。

如果将属性定义为单位的父实体,则每个单位对象也是属性对象。因此,获取属性也会返回所有单位

这可能不是你想要的。您应该只定义属性和单元之间的关系,而不设置父实体(这样两个类都是
NSManagedObject
的直接子类)


备注:我将实体称为Property和Unit,因为每个实例代表一个单独的属性或单元

看一下
NSFetchRequest
setIncludesSubentities
方法。如果您的数据模型在代码中反映了您的继承模式,那么如果您设置正确,那么您的获取请求将不会获取子实体


NSFetchRequest*request=[[NSFetchRequest alloc]init];
request.includesSubentities=否;

你能展示一下你得到了什么吗?可能放在一个循环中,然后在代码末尾将每个元素记录在
allItems
中。如果看不到结果或如何显示结果,很难说这两者中哪一个是真正的问题。可能您获得的记录太多,或者您显示这些记录的方式实际上是显示父项+附加到该父项的每个单位记录。需要更多信息。请检查一下,您的表可能有问题。您的表中的数据结构不同。@EverydayImSeeSharping:这是一个很好的答案,请不要误解我的意思。但您应该考虑是否真的要将“单位”定义为“属性”的子实体。这意味着“单位”继承了“属性”的所有属性,所以“单位”也将有地址、城市、州。。。属性。这也意味着两个实体都存储在一个公共SQLite表中,而不是两个单独的表中。-在您的情况下,可能不需要设置父/子实体,您可以定义关系。您是对的,我进行了调试并将单元设置为子实体,它继承所有父实体的属性,并将父实体作为属性(关系)。我想我可以通过执行unit.property来访问单元的父级。在SQL世界中,属性表和单元表显然具有父子关系。那么在什么情况下,我应该在核心数据中使用父子关系?@EverydayImSeeSharping:如果您有共享一组公共属性的实体,例如动物作为狗和猫的父实体。这与定义一个类的子类是一样的父/子实体与关系无关。是的,这也是我想要的。干杯