【问题标题】:Core data setReturnsDistinctResult not working核心数据 setReturnsDistinctResult 不起作用
【发布时间】:2011-02-19 12:40:46
【问题描述】:

所以我正在构建一个小型应用程序,它使用约 25mb 大小的核心数据数据库和 4 个实体。这是巴士时刻表。

在一个名为“Stop”的表中,有大约 1300 个公共汽车站条目,其属性为“name”、“id”、“longitude”、“latitude”和情侣关系。现在有许多具有相同名称属性但坐标和ID不同的站点。所以我想在表格视图中显示所有不同的停止名称,我使用 setReturnsDistinctResults 和 NSDictionaryResultType 和 setPropertiesToFetch。但是 setReturnsDistinctResult 不起作用,我仍然收到所有条目。

这里的代码:

- (NSFetchRequest *)fetchRequest {
    if (fetchRequest == nil) {
        fetchRequest = [[NSFetchRequest alloc] init];
        NSEntityDescription *entity =  [NSEntityDescription entityForName:@"Stop" inManagedObjectContext:managedObjectContext];
        [fetchRequest setEntity:entity];
        NSArray *sortDescriptors = [NSArray arrayWithObject:[[[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES] autorelease]];
        [fetchRequest setSortDescriptors:sortDescriptors];
        [fetchRequest setResultType:NSDictionaryResultType];
        [fetchRequest setPropertiesToFetch:[NSArray arrayWithObject:[[entity propertiesByName] objectForKey:@"name"]]];
        [fetchRequest setReturnsDistinctResults:YES];
        DebugLog(@"fetchRequest initialized");
    }
    return fetchRequest;
}

/////////////////////

- (NSFetchedResultsController *)fetchedResultsController {
    if (self.predicateString != nil) {
        self.predicate = [NSPredicate predicateWithFormat:@"name CONTAINS[cd] %@", self.predicateString];
        [self.fetchRequest setPredicate:predicate];
    } else {
        self.predicate = nil;
        [self.fetchRequest setPredicate:predicate];
    }
    fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:self.fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:sectionNameKeyPath cacheName:nil];

    return fetchedResultsController;
}  

//////////////

- (UITableViewCell *)tableView:(UITableView *)table cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }

    cell.textLabel.text = [[fetchedResultsController objectAtIndexPath:indexPath] valueForKey:@"name"];

    return cell;
}

【问题讨论】:

  • 没有找到解决办法。也许这是一个错误,因为名称属性中的字符串不仅使用拉丁字母:\。继续使用 executeFetchRequest 并过滤数组中的所有条目。

标签: iphone xcode iphone-sdk-3.0 core-data


【解决方案1】:

这对你来说可能会迟到,但可能会帮助其他人。

我遇到了同样的问题。我发现,如果持久存储类型为 NSSQLiteStoreType,则 returnDistinctResults 有效。但是对于 NSXMLStoreType,不同的值不起作用。

我没有测试 NSBinaryStoreType 和 NSInMemoryStoreType 的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-23
    • 1970-01-01
    • 1970-01-01
    • 2012-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多