我有一些图像保存在 ~Documents 中,我在一个自定义单元格的tableView中显示它们看起来像
如您所见,单元格具有 imageView,imageName标签,尺寸标签和日期标签(创建图像文件的日期)。现在,图像以随机顺序显示。我想按照它创建的日期(升序/降序)对它们进行排序
我该怎么办?
答案 0 :(得分:4)
使用date属性在数组上使用NSSortDescriptor
。像这样:
NSSortDescriptor *dateSortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"date" ascending:YES];
arrayUsedForTableView = [arrayUsedForTableView sortedArrayUsingDescriptors:@[dateSortDescriptor]];
其中arrayUsedForTableView
是您用作UITableViewDataSource
模型的数组,date
是该对象内NSDate
属性的属性名称阵列。
然后在-reloadData
上致电UITableView
。
NSObject
必须有一个id
子类, 图像和日期NSArray
内的@interface MyTableViewModelObject : NSObject
@property (nonatomic) UIImage *image;
@property (nonatomic) NSDate *date;
@end
。头文件中的内容如下:
NSSortDescriptor
这是必要的,因为{{1}}正在寻找具有日期的对象,要根据日期属性进行排序,而不是只日期。
答案 1 :(得分:1)
您可以使用以下代码从文档目录中按创建日期获取文件的排序数组files
:
NSMutableArray* files = [NSMutableArray new];
NSFileManager* fileManager = [NSFileManager defaultManager];
NSString* docDir = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
NSArray* content = [fileManager contentsOfDirectoryAtPath:docDir error:NULL];
for (NSString* file in content) {
NSDictionary* attrs = [fileManager attributesOfItemAtPath:file error:nil];
NSDate *date = nil;
if (attrs) {
date = (NSDate*)[attrs objectForKey: NSFileCreationDate];
}
[files addObject:@{@"path": file,@"createdon":(date ? date : [NSNull null])}];
}
[files sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
NSDictionary* fd1 = obj1;
NSDictionary* fd2 = obj2;
NSDate* dt1 = fd1[@"createdon"];
NSDate* dt2 = fd2[@"createdon"];
if (dt1 > dt2) {
return NSOrderedAscending;
}
else if (dt1 < dt2) {
return NSOrderedDescending;
}
else {
return NSOrderedSame;
}
}];
然后使用files
数组作为UITableView的数据源非常简单。
显然,您可能需要修改代码以满足您的特定要求。
答案 2 :(得分:0)
正如其他响应者所暗示的那样:
您不对表格视图进行排序。表视图显示其数据源的内容。您几乎总是使用数组将数据存储在表视图中。
如果要对表视图中的项进行排序,请对用于填充表视图的数组进行排序,然后调用表视图的reloadData方法。这告诉表视图数据源的内容已经改变。
我偏向于新的NSMutableArray sortUsingSelector:方法系列。您可以通过提供一段代码来对可变数组进行排序,该代码块知道如何根据排序条件比较数组中的两个对象。在您的情况下,您可能有一个字典数组,其中每个字典包含图像文件名,NSDate和可能的文件大小。您将编写一个NSComparator块,它知道如何比较一对对象中的两个日期字段,系统可以对数组进行排序。