코어 데이터의 엔티티에서 특정 속성에 대한 모든 값을 선택하는 방법을 모색 중입니다. 여기엔티티의 특정 속성 선택 코어 데이터
내 모델 :
I 유형 "문자열"의 3 개 속성으로 "나라"라는 엔티티 있습니다
- name_en
- name_fr을
- name_de
UITableView에 값을 표시하지만 name_en 또는 name_fr 또는 name_de 기반의 값만 표시하고 싶습니다. 사용자 기본 언어. 현재 모든 값이 선택됩니다 (name_en, name_fr 및 name_de).
솔루션 (시몬에게 감사) :
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K MATCHES %@", [NSString stringWithFormat:@"name_%@",[Config getCurrentLocale]], @".{1,}"];
[구성 getCurrentLocale이] "FR"OR "드"OR "EN"저를 반환.
은다음으로, 요청이 술어를 적용
NSFetchRequest * request = [self defaultRequest];
request.predicate = predicate;
self.fetchedResultsController =
[[NSFetchedResultsController alloc] initWithFetchRequest:request
managedObjectContext:context
sectionNameKeyPath:nil
cacheName:nil];
(지금 해결) 내 문제 ========== 상대 =========
-(NSFetchRequest *) defaultRequest
{
NSFetchRequest * request = [[NSFetchRequest alloc] init];
NSEntityDescription * entity = [NSEntityDescription entityForName:self.entityName
inManagedObjectContext:appDelegate.managedObjectContext];
NSDictionary *attributes = [entity attributesByName];
// Put some stuff here to "filter" the request and show only name_en OR name_fr OR name_de ?
request.entity = entity;
request.fetchBatchSize = 20;
//request.fetchLimit = 50;
request.sortDescriptors = self.defaultSortDescriptors;
return request;
}
당신의 도움을 위해 너희들을 감사합니다
는 여기에 내가 페치 요청을 구축 나의 방법이다. 여기에 편집 한
가있는 UITableViewController의 내 서브 클래스의 데이터 소스 방법입니다 :
#pragma mark - UITableView
- (NSFetchedResultsController *)fetchedResultsControllerForTableView:(UITableView *)tableView
{
if (tableView == self.searchDisplayController.searchResultsTableView)
return self.searchFetchedResultsController;
if (tableView == self.tableView)
return self.fetchedResultsController;
return nil;
}
#pragma mark DataSource
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return [[[self fetchedResultsControllerForTableView:tableView] sections] count];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [[[[self fetchedResultsControllerForTableView:tableView] sections] objectAtIndex:section] numberOfObjects];
}
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
return [[[[self fetchedResultsControllerForTableView:tableView] sections] objectAtIndex:section] name];
}
- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index
{
return [[self fetchedResultsControllerForTableView:tableView] sectionForSectionIndexTitle:title atIndex:index];
}
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
{
return [[self fetchedResultsControllerForTableView:tableView] sectionIndexTitles];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString * identifier = [self cellIdentifierForIndexPath:indexPath];
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
if (cell == nil)
cell = [self newTableViewCellWithIndentifier:identifier];
// Configure the cell.
[self tableView:tableView configureCell:cell atIndexPath:indexPath];
return cell;
}
편집 2 :
난 그냥 결과를 표시하려면이 같은 시도 출력 :
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Countries"];
fetchRequest.resultType = NSDictionaryResultType;
[fetchRequest setPropertiesToFetch:[NSArray arrayWithObjects:@"name_en", nil]];
NSError *error = nil;
NSArray *results = [[AppDelegate sharedInstance].managedObjectContext executeFetchRequest:fetchRequest error:&error];
NSMutableArray *countries = [results valueForKey:@"name_en"];
NSLog(@"Count: %d", countries.count);
일반적으로 name_en에는 약 246 개 국가가 있으며 그 수는 757입니다! :(
편집 => 내가 여기 해결책을 찾을 이유 그래서, name_fr의 합이 + name_en + name_de ... 이해가 안 : How to fetch unique field values (song_type) from core data
을 지금, 나는 함께 작품에 내 코드에 적응해야 이 코드 조각 :
감사합니다. 이미 시도한 것 같아서 효과가 없습니다. 다시 시도하고 작동하는지 알려 드리겠습니다.) – Lapinou
음, 실제로 작동합니다. 하지만 내가 가진 문제는, 내 UITableView에서 모든 값을 name_fr, name_de 및 name_nl 있지만 표시되는 유일한 값이 올바른 것입니다. 내 말은, "name_en"으로 가져 오기 속성을 설정하면 표시되는 값은 "name_en"이지만 내 UITableView에서는 "name_en + name_fr + name_nl 값 ..."과 같은 셀 수가 있습니다. 이유를 이해할 수 없습니다 :/ – Lapinou
@Lapinou UITableViewDatasource Delegate 구현 방법에 대한 코드를 붙여 넣습니다. 귀하의 의견에 당신의 의미를 얻지 못했지만 내 UITableView에서, "name_en + name_fr + name_nl 값 ..."과 같은 셀 수가 있습니다. – Simon