코어 데이터 스토리지의 두 테이블/모델에서 "조인"유형 연산을 수행해야하며, 뭔가 얻는 데 좋은 예제를 찾는 데 어려움을 겪고 있습니다. 이 일을하는 것.코어 데이터 - 간단한 JOIN 유형 가져 오기
내가해야 할 일은 상당히 간단합니다. 두 개의 모델/테이블 : location 및 location_categories. location에는 location/establishment의 세부 정보 (고유 ID 포함)가 있고 location_categories 테이블에는 category_id와 연관된 location_id가 들어 있습니다. category_id가 주어지면 두 테이블/모델을 조인하는 모든 위치를 선택해야합니다. 똑바로 SQL이 있었다면 (I 실제 SQLite는 DB에 대해 그것을 실행하면이 쿼리 작업을 수행), 그 결과는 다음과 같습니다
// pretend we passed in a catID of 29:
SELECT * FROM zlocation where zlocid in (select zlocid from zloccategory where zcatid = 29)
그래서 당신이 볼 수 있듯이, 그것은 꽤 솔직. 두 가지 가져 오기 및 반복을 수행하지 않고이 작업을 수행 할 수있는 방법이 있습니까? 이 작업을 수행하기위한 현재의 목표 코드는 아래에 있으며 잘 작동하지만 두 테이블 모두에 많은 데이터가 포함되어 있기 때문에 무섭게 느리고 비효율적입니다. 를위한 루프는 거대한 침체의 원인이되고, 내 직감이 작품은 정말 물건의 DB/코어 - 데이터 측에서 수행해야 함을 알려줍니다 :이 하나 하나 가능 여부에
- (NSMutableArray *) fetchLocsWithCatID:(NSString *)catID {
NSMutableArray *retArr = [[NSMutableArray alloc] init];
NSManagedObjectContext *context = [self managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:[NSEntityDescription entityForName:MODELNAME_LOCCATEGORIES inManagedObjectContext:context]];
[fetchRequest setPredicate: [NSPredicate predicateWithFormat:@"catID == %@", catID]];
NSError *error;
NSArray *locCats = [context executeFetchRequest:fetchRequest error:&error];
NSArray *allLocsArr = [self fetchAllDataForTable:MODELNAME_LOCATION]; // this retrieves contents of entire table
for (Location *currLoc in allLocsArr) {
for (LocCategory *currLocCat in locCats) {
if ([currLoc.locID isEqualToString:currLocCat.locID]) {
if (![retArr containsObject:currLoc]) {
[retArr addObject:currLoc];
}
}
}
}
return retArr;
}
어떤 생각 술어/가져 오기? 또는 모르겠다. 아마도 objective-c 코드를 통해 두 개의 NSArrays에 참여하는 더 효율적인 방법이 있을까요?
미리 알려 주시면 감사하겠습니다.
관계를 연결할 필요성에 관해 언급 한 이래로 이것을 가장 좋은 답으로 표시하십시오. 그것은 제가 모델에서 관계를 구현 한 후에도 여전히 저를 곤란하게 만들었습니다. 고맙습니다! – svguerin3