2014-11-15 5 views
0

CoreData 모델에 국가, 주 및시 엔티티가 있습니다. 여기에 구조입니다 :CoreData에서 관계형 엔터티의 특정 데이터 가져 오기

@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 방법 상태 개체를 포함 NSSet 상태에서만 SID와 제목을 설정하는 경우에만 언급 한 개체의 필드 만이 할 수 있습니다.

도시 목록을 가져 오기 위해 다른 요청을 보내 드리겠습니다. 도와주세요.

+0

이렇게하면 도움이 될 수 있습니다. http://geekanddad.wordpress.com/2014/02/14/core-data-efficient-fetchching-of-portions-of-entities/ – Flexicoder

+0

나는 혼란 스럽습니다. 시가 가져 오지 못하도록하고 싶습니까? 관계는 항상 잘못되어 있으므로 액세스하지 않으면 가져 오지 않습니다. –

답변

0

propertiesToFetch은 필요하지 않습니다. 이 기능 (BTW에는 NSDictionaryResultType이 필요함)은 많은 양의 데이터가 있고 특정 필드 만 필요로하는 특별한 상황을위한 것입니다. 이것은 분명히 필요하지 않습니다!

Country 개체 만 가져 오기하면됩니다. 코어 데이터는 으로 자동으로 메모리로 불필요한 데이터를 가져 오지 않도록 최적화됩니다.

NSFetchRequest *request = [NSFetchRequest fetchRequestsWithEntityName:@"Country"]; 
// consider sorting 
NSArray *countryList = [context executeFetchRequest:request error:nil]; 

이제 국가 목록이 있습니다. 그것은 또한 상태를 포함합니다. 특정 국가의 주를 얻는 것이 더 간단 할 수는 없습니다.

NSSet *states = country.states; 

NB : 나는 State "국가"에 City에서 일 관계를 호출 생각하는 것은 문제가있다. 그것을 state으로 바꾸는 것이 좋습니다.

+0

시도해 보셨습니까? 작동 했나요? – Mundi

+0

나는 이것을 시도하고 작동한다. 나는 country.states를 사용할 때까지 잘못된 데이터를 얻는다. 내가 알고 싶었던 것은 상태가 메모리에로드 될 때 state.cities의 오류 데이터조차 얻지 못하는 어떤 방법이 있습니까? –

+0

오류는 신경 쓰지 않아야합니다. 백그라운드에서 수행되고 이미 최적화되어 있습니다. – Mundi