我在搜索如何選擇核心數據中實體中特定屬性的所有值。在實體核心數據中選擇特定屬性
這裏我的模型:
我有一個名爲 「國家」,類型爲 「字符串」 的3個屬性的實體:
- name_en
- name_fr
- name_de
我在UITableView上顯示值,但我只想顯示來自name_en或name_fr或name_de的值在用戶默認語言。目前,所有的值都被選中(name_en,name_fr和name_de)。
解決方案(感謝Simon):
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K MATCHES %@", [NSString stringWithFormat:@"name_%@",[Config getCurrentLocale]], @".{1,}"];
當[配置getCurrentLocale]返回我 「FR」 或 「德」 或 「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;
}
謝謝你們的幫助。
編輯1
這裏是我的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);
通常,我在名稱中有大約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的所有值,但唯一顯示的值是正確的。我的意思是,如果我將de屬性設置爲「name_en」,顯示的值是「name_en」,但在我的UITableView中,單元格數等於「name_en + name_fr + name_nl值...」。我不明白爲什麼:/ – Lapinou
@Lapinou將代碼粘貼到實現UITableViewDatasource委託的方式上。沒有得到你的意見 - 但在我的UITableView中,我的單元格數量等於「name_en + name_fr + name_nl值...」 – Simon