【发布时间】:2013-06-24 14:20:04
【问题描述】:
我有一个NSMutableArray,它从 iOS 的文档目录中检索了文件。
我使用以下代码从文档目录中检索文件。
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSError * error;
self.array = [[NSMutableArray alloc] init];
self.array = (NSMutableArray *)[[NSFileManager defaultManager] contentsOfDirectoryAtPath:documentsDirectory error:&error];
然后我在UITableView 中显示文件列表。
但是它按字母顺序显示。
我想显示它按文件的创建日期排序。
编辑
这是我写的ViewWillAppear。
- (void)viewWillAppear:(BOOL)animated
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSError * error;
self.array = [[NSMutableArray alloc] init];
self.array = (NSMutableArray *)[[NSFileManager defaultManager] contentsOfDirectoryAtPath:documentsDirectory error:&error];
[self loadData];
}
- (void) loadData
{
self.sortedFileList = [self.array mutableCopy];
[self.sortedFileList sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
NSDate* d1 = [[NSFileManager defaultManager] attributesOfFileSystemForPath:obj1 error:nil][@"fileCreationDate"];
NSDate* d2 = [[NSFileManager defaultManager] attributesOfFileSystemForPath:obj2 error:nil][@"fileCreationDate"];
return [d1 compare:d2];
}];
}
而且它不按日期排序。
我该怎么做?
感谢您的任何建议和帮助。
【问题讨论】:
-
您没有在此处提供完整的上下文,但我怀疑您在
cellForRowAtIndexPath方法中执行此操作。不要那样做!您将为显示的每个单元格重新排序数组。 -
是的,下面的代码是我在 cellForRowAtIndexPath 中编写的。你的意思是我需要重新排序数组中的每一行?
-
您显示的代码将为表格中的每个单元格调用一次。这意味着您将为您显示的每个单元格检索和排序文件列表。如果该列表在调用之间因某种原因而不同,您最终可能会崩溃(索引超出范围等)。
-
查看我的更新答案。
标签: ios objective-c cocoa-touch nsmutablearray nsdate