2011-06-15 16 views

Respuesta

8

¿Qué ha intentado hasta ahora?

no he hecho esto, pero un rápido vistazo a los documentos me hace pensar que usted debe tratar lo siguiente:

  1. llamada -contentsOfDirectoryAtURL:includingPropertiesForKeys:options:error: y especificar NSURLContentModificationDateKey como una de las claves.
  2. Obtendrá una colección de objetos NSURL que luego puede ordenar usando un método NSArray como -sortedArrayUsingComparator:.
  3. Pase un bloque comparador que busca la fecha de modificación para cada NSURL usando -getResourceValue:forKey:error:.

Actualización: Cuando escribí la respuesta anterior, -getResourceValue:forKey:error: existía en iOS, pero no hizo nada. Ese método es ahora funcional como de iOS 5. El siguiente código registrará los archivos de recursos de una aplicación seguido de una lista de fechas de modificación correspondientes:

NSFileManager *manager = [NSFileManager defaultManager]; 
NSArray *files = [manager contentsOfDirectoryAtURL:[[NSBundle mainBundle] resourceURL] 
         includingPropertiesForKeys:[NSArray arrayWithObject:NSURLContentModificationDateKey] 
              options:nil 
              error:nil]; 
NSMutableArray *dates = [NSMutableArray array]; 
for (NSURL *f in files) { 
    NSDate *d = nil; 
    if ([f getResourceValue:&d forKey:NSURLContentModificationDateKey error:nil]) { 
     [dates addObject:d]; 
    } 
} 
NSLog(@"Files: %@", files); 
NSLog(@"Dates: %@", dates); 
+0

Curiosamente, la documentación para getResourceValue: forKey: Error: dicen "Este método se IMPLEMENTAR EN iOS, por lo que no realiza ninguna operación ". Justo debajo, dicen "Disponible en iOS 4.0 y versiones posteriores". El por qué agregarían un método que no se implementa es confuso. ? = | Más: http://www.themusingsofalostprogrammer.com/2011/06/what-were-they-thinking-apple.html – Dustin

+0

El marco de Foundation es común para MacOS X e iOS, por lo que puede estar allí simplemente porque es útil en MacOS X. Por otro lado, puede que valga la pena intentarlo con la esperanza de que la documentación sea incorrecta; sucede de vez en cuando. – Caleb

+0

@Dustin, tenga en cuenta que los documentos ahora indican que 'getResourceValue: forKey: error:' es funcional en iOS 5. Hice una prueba rápida y confirmé que funciona. Actualizaré la respuesta anterior también. – Caleb

2
static static NSInteger contentsOfDirSort(NSString *left, NSString *right, void *ptr) { 

    (void)ptr; 

    struct stat finfo_l, r_finfo_r; 

    if(-1 == stat([left UTF8String], &finfo_l)) 
     return NSOrderedSame; 

    if(-1 == stat([right UTF8String], &finfo_r)) 
     return NSOrderedSame; 

    if(finfo_l.st_mtime < finfo_r.st_mtime) 
     return NSOrderedAscending; 

    if(finfo_l.st_mtime > finfo_r.st_mtime) 
     return NSOrderedDescending; 

    return NSOrderedSame; 
} 

Ahora, más adelante en el código.

NSMutableArray *mary = [NSMutableArray arrayWithArray:filePathsArray]; 

[mary sortUsingFunction:contentsOfDirSort context:nil]; 

// Use mary... 
0

En una categoría más NSFileManager:

static NSInteger contentsOfDirSort(NSURL *leftURL, NSURL *rightURL, void *ptr) 
{ 
    (void)ptr; 

    NSDate * dateLeft ; 
    [leftURL getResourceValue:&dateLeft 
         forKey:NSURLContentModificationDateKey 
         error:nil] ; 

    NSDate * dateRight ; 
    [leftURL getResourceValue:&dateRight 
         forKey:NSURLContentModificationDateKey 
         error:nil] ; 

    return [dateLeft compare:dateRight]; 
} 




- (NSArray *)contentsOrderedByDateOfDirectoryAtPath:(NSURL *)URLOfFolder ; 
{ 
    NSArray *files = [self contentsOfDirectoryAtURL:URLOfFolder 
         includingPropertiesForKeys:[NSArray arrayWithObject:NSURLContentModificationDateKey] 
              options:0 
               error:nil]; 

    return [files sortedArrayUsingFunction:contentsOfDirSort 
            context:nil] ; 
} 
0

método rápido:

-(void)dateModified 
{ 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 

    NSFileManager *manager = [NSFileManager defaultManager]; 
    NSArray *fileList = [manager contentsOfDirectoryAtPath:documentsDirectory error:nil]; 

    //--- Listing file by name sort 
    NSLog(@"\n File list %@",fileList); 




    int num; 
    //-- Listing file name with modified dated 
    for (NSString *s in fileList) 
    { 
     NSString *filestring = [documentsDirectory stringByAppendingFormat:@"/%@",s]; 

     NSDictionary *filePathsArray1 = [[NSFileManager defaultManager] attributesOfItemAtPath:filestring error:nil]; 
     NSString *modifiedDate = [filePathsArray1 objectForKey:NSFileModificationDate]; 
     NSLog(@"\n Modified Day : %@", modifiedDate); 

     num=num+1; 
    } 
} 
2
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSFileManager *manager = [NSFileManager defaultManager]; 
    NSArray *imageFilenames = [manager contentsOfDirectoryAtPath:documentsDirectory error:nil]; 
    NSMutableArray *originalImage = [[NSMutableArray alloc]init]; 

    for (int i = 1; i < [imageFilenames count]; i++) 
    { 
     NSString *imageName = [NSString stringWithFormat:@"%@/%@",documentsDirectory,[imageFilenames objectAtIndex:i] ]; 

    } 

    //---------sorting image by date modified 
    NSArray* filelist_date_sorted; 

    filelist_date_sorted = [imageFilenames sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) 
          { 
           NSDictionary* first_properties = [[NSFileManager defaultManager] attributesOfItemAtPath:[NSString stringWithFormat:@"%@/%@", documentsDirectory, obj1] error:nil]; 
           NSDate *first = [first_properties objectForKey:NSFileCreationDate]; 
           NSDictionary *second_properties = [[NSFileManager defaultManager] attributesOfItemAtPath:[NSString stringWithFormat:@"%@/%@", documentsDirectory, obj2] error:nil]; 
           NSDate *second = [second_properties objectForKey:NSFileCreationDate]; 
           return [second compare:first]; 
          }]; 

NSLog(@" Date sorted result is %@",filelist_date_sorted); 
Cuestiones relacionadas