我的CoreData模型中有Country,State和City实体。结构如下:
@interface Country : NSManagedObject
@property (nonatomic, retain) NSString * cId;
@property (nonatomic, retain) NSString * title;
@property (nonatomic, retain) NSSet *states; // This will contain State object
@end
@interface State : NSManagedObject
@property (nonatomic, retain) NSString * sId;
@property (nonatomic, retain) NSString * title;
@property (nonatomic, retain) NSSet *cities; // This will contain City object
@property (nonatomic, retain) Country *country;
@end
@interface City : NSManagedObject
@property (nonatomic, retain) NSString * cityId;
@property (nonatomic, retain) NSString * title;
@property (nonatomic, retain) State *state;
@end
正如你所看到的,我在国家与州之间有一对多的关系。
现在我想要的是获取所有州的国家/地区列表,但不希望城市列表与州相关联。
NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"Country"];
[request setPropertiesToFetch:@[@"cId", @"title", @"states"]];
NSError *error = nil;
NSArray *aryCategories = [gblAppDelegate.managedObjectContext executeFetchRequest:request error:&error];
setPropertiesToFetch
设置此属性允许只提供实体中提到的字段,但是如何仅为包含State对象的NSSet状态设置sid和title。
要获取城市列表,我会发送另一个请求。 请帮帮我。
答案 0 :(得分:0)
您不需要propertiesToFetch
。此功能(BTW需要NSDictionaryResultType
)适用于您拥有大量数据且只需要某些字段的特殊情况。在您的情况下,这绝对没有必要!
只需获取Country
个对象。核心数据将自动优化,以避免将不必要的数据提取到内存中。
NSFetchRequest *request = [NSFetchRequest fetchRequestsWithEntityName:@"Country"];
// consider sorting
NSArray *countryList = [context executeFetchRequest:request error:nil];
您现在有一个国家/地区列表。它还包含各州。获得特定国家的州可能不会更简单。
NSSet *states = country.states;
注意:我认为从City
到State
" country"是有问题的。我建议将其重命名为state
。