我有NSArray,它包含我库中的所有ALAssets。我需要按照这些资产的名称对其进行过滤。我已尝试仅使用资产名称创建第二个数组(通过ALAssetRepresention)。但后来我无法显示缩略图并保存链接到资产。 那我怎么解决这个问题呢?
答案 0 :(得分:1)
您需要将所有对象(如名称,缩略图和网址)存储在一个对象中,然后将所有这些对象存储在一个数组中。然后使用此代码:
NSSortDescriptor *sorter = [[NSSortDescriptor alloc] initWithKey:@"ItemTitle"
ascending:YES
selector:@selector(localizedStandardCompare:)];
[arrData sortUsingDescriptors:[NSArray arrayWithObject:sorter]];
我将名称存储在包含NSString的对象中,名称为“ItemTitle”
答案 1 :(得分:1)
我下一步解决了这个问题。
我创建了包含2个值的对象SearchItems
:NSString *name
和ALAsset *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;
}
这就是全部。我希望将来有人会帮助。