NSPredicate和ALAsets的NSArray

时间:2014-02-11 07:36:09

标签: ios filter nspredicate alasset

我有NSArray,它包含我库中的所有ALAssets。我需要按照这些资产的名称对其进行过滤。我已尝试仅使用资产名称创建第二个数组(通过ALAssetRepresention)。但后来我无法显示缩略图并保存链接到资产。 那我怎么解决这个问题呢?

2 个答案:

答案 0 :(得分:1)

您需要将所有对象(如名称,缩略图和网址)存储在一个对象中,然后将所有这些对象存储在一个数组中。然后使用此代码:

NSSortDescriptor *sorter = [[NSSortDescriptor alloc] initWithKey:@"ItemTitle" 
                                                       ascending:YES 
                                                        selector:@selector(localizedStandardCompare:)];

[arrData sortUsingDescriptors:[NSArray arrayWithObject:sorter]];

我将名称存储在包含NSString的对象中,名称为“ItemTitle”

答案 1 :(得分:1)

我下一步解决了这个问题。 我创建了包含2个值的对象SearchItemsNSString *nameALAsset *asset。 当我从库中枚举文件时,我设置了值:

ALAssetRepresentation *rep = [result defaultRepresentation];

SearchItem *newItem = [[SearchItem alloc] init];
[newItem setName:[rep filename]];
[newItem setAsset:result];

然后我将此项添加到NSMutableArray[assetsItems addObject:newItem];

最后我使用NSPredicate按name过滤我的数组:

NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"name CONTAINS[cd] %@", searchText];
    _searchResults = [self.assetsItems filteredArrayUsingPredicate:resultPredicate];

现在阵列准备好了。表格视图示例:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellIdentifier = @"SearchCell";

    SearchCell *cell = (SearchCell *)[self.tableView dequeueReusableCellWithIdentifier:cellIdentifier];

    // Configure the cell...
    if (cell == nil) {
        cell = [[SearchCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
    }

    // Configure the cell...
    SearchItem *searchItem = [_searchResults objectAtIndex:indexPath.row];
    ALAsset *currentAsset = searchItem.asset;
    ALAssetRepresentation *rep = [currentAsset defaultRepresentation];

    [cell.nameLabel setText:[rep filename]];
    [cell.thumbnail setImage:[UIImage imageWithCGImage:[currentAsset thumbnail]]];

    return cell;
}

这就是全部。我希望将来有人会帮助。