4

私は iOS dev と Core Data が初めてです。親 NSManagedObject があります

@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;

このメソッドで親プロパティをフェッチして、親プロパティ オブジェクトをテーブルビューに表示すると、次のようになります。

- (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 つのユニットを持つプロパティがある場合、プロパティ テーブルビューには 1 行しか表示されませんが、4 行 (親 1 つと子 3 つ) が表示されます。

親オブジェクトを返すにはどうすればよいですか?

ありがとう。

4

2 に答える 2

15

NSFetchRequestの方法を見てくださいsetIncludesSubentities。データモデルがコード内の継承パターンを反映している場合、適切に設定されていれば、フェッチリクエストは子エンティティをフェッチしません。

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

于 2013-03-11T06:15:22.377 に答える
4

プロパティをUnitsの親エンティティとして定義すると、すべてのUnitsオブジェクトもPropertiesオブジェクトになります。したがって、プロパティをフェッチすると、すべてのユニットも返されます。

これはおそらくあなたが望んでいたものではありません。親エンティティを設定せずに、プロパティユニット間の関係を定義する必要があります(両方のクラスがの直接のサブクラスになるようにNSManagedObject)。

備考:各インスタンスは単一のプロパティまたはユニットを表すため、エンティティをプロパティおよびユニットと呼びます。

于 2013-03-11T05:04:17.337 に答える