kod nWszystkie za wyżej wskazał mnie we właściwym kierunku, ale Myślę, że w kodzie są błędy, które zostały zamieszczone powyżej. Na przykład:
- Dlaczego
filesAndProperties
przydzielane za pomocą NMutableDictonary
raczej niż NSMutableArray
?
-
NSDictionary* properties = [[NSFileManager defaultManager]
attributesOfItemAtPath:NSFileModificationDate
error:&error];
Powyższy kod przechodzi niewłaściwy parametr dla attributesOfItemAtPath
- powinien być attributesOfItemAtPath:path
- Twoje są sortowania tablicy
files
, ale powinno być sortowania filesAndProperties
.
I wprowadziły takie same, z poprawkami, a przy użyciu bloków i pisał poniżej:
NSArray *searchPaths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);
NSString* documentsPath = [searchPaths objectAtIndex: 0];
NSError* error = nil;
NSArray* filesArray = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:documentsPath error:&error];
if(error != nil) {
NSLog(@"Error in reading files: %@", [error localizedDescription]);
return;
}
// sort by creation date
NSMutableArray* filesAndProperties = [NSMutableArray arrayWithCapacity:[filesArray count]];
for(NSString* file in filesArray) {
NSString* filePath = [iMgr.documentsPath stringByAppendingPathComponent:file];
NSDictionary* properties = [[NSFileManager defaultManager]
attributesOfItemAtPath:filePath
error:&error];
NSDate* modDate = [properties objectForKey:NSFileModificationDate];
if(error == nil)
{
[filesAndProperties addObject:[NSDictionary dictionaryWithObjectsAndKeys:
file, @"path",
modDate, @"lastModDate",
nil]];
}
}
// sort using a block
// order inverted as we want latest date first
NSArray* sortedFiles = [filesAndProperties sortedArrayUsingComparator:
^(id path1, id path2)
{
// compare
NSComparisonResult comp = [[path1 objectForKey:@"lastModDate"] compare:
[path2 objectForKey:@"lastModDate"]];
// invert ordering
if (comp == NSOrderedDescending) {
comp = NSOrderedAscending;
}
else if(comp == NSOrderedAscending){
comp = NSOrderedDescending;
}
return comp;
}];
Aby odwrócić kolejność, możesz pomnożyć wynik porównania przez -1. –
Aby odwrócić kolejność, możesz użyć 'return [[ścieżka2 objectForKey: @" lastModDate "] porównaj: [ścieżka1 objectForKey: @" lastModDate "]];' – Ievgen