【问题标题】:How to sort uiimages by date from application folder in ios [duplicate]如何从ios中的应用程序文件夹中按日期对uiimages进行排序[重复]
【发布时间】:2013-11-28 19:04:29
【问题描述】:

如何通过从图库中对日期修改类型进行排序来显示图像。我可以使用

从文件夹中获取数据
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];

    NSFileManager *manager = [NSFileManager defaultManager];

还有如何按修改日期比较uiimage。

在此先感谢....

【问题讨论】:

    标签: ios iphone ios5 ios6 ios7


    【解决方案1】:

    为此,您必须使用 ALAssetsLibrary 来枚举图库中的所有图像。

    从中您可以获取每个图像的属性:

    • 图像文件名。
    • 图片资源网址

    并且你的答案就在这里

    您可以使用 ALAssetPropertyDate 属性检索资产的创建日期:

      ALAsset* asset;
       //do anthing 
      NSDate* date = [asset valueForProperty:ALAssetPropertyDate];
    

    也许对你有帮助。

    【讨论】:

      【解决方案2】:

      最简单的方法:

      - (void)images
      {
      
          //---Get directory from app folder
          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] ];
              UIImage *image = [UIImage imageWithContentsOfFile:imageName];
              [originalImage addObject:image];
          }
          NSLog(@"\n\n\n Original images %@",originalImage);
      
      
      
          //---------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:NSFileModificationDate];
      NSDictionary *second_properties = [[NSFileManager defaultManager] attributesOfItemAtPath:[NSString stringWithFormat:@"%@/%@", documentsDirectory, obj2] error:nil];
          NSDate *second = [second_properties objectForKey:NSFileModificationDate];
          return [second compare:first];
          }];
          NSLog(@"\n\n\n date images %@",filelist_date_sorted);
          NSMutableArray *sortedImage = [[NSMutableArray alloc]init];
      
          //--- Store sorted images in array
      
          for (int i = 1; i < [imageFilenames count]; i++)
          {
              NSString *imageName = [NSString stringWithFormat:@"%@/%@",documentsDirectory,[filelist_date_sorted objectAtIndex:i] ];
              UIImage *image = [UIImage imageWithContentsOfFile:imageName];
              if(!(image==nil))
              {
                  [sortedImage addObject:image];
              }
      
          }
      
          NSLog(@"\n\n\nsorted images %@",sortedImage);
      
      }
      

      【讨论】:

        【解决方案3】:

        您可以使用此代码获取图像的属性

        NSDictionary *attributes = [[NSFileManager defaultManager] attributesOfItemAtPath:@"path/to/my/file" error:nil];
        

        您可以使用此代码获取修改日期

        NSDate *date = [attributes fileModificationDate];
        

        创建 NSMutableDictionary 并将修改日期作为键和路径作为值。

        NSMutableDictionary *imagesDict = [[NSMutableDictionary alloc] init];
        
        for(NSString *path in paths)
        {
          NSDictionary *attributes = [[NSFileManager defaultManager] ;
          NSDate *date = [attributes fileModificationDate];
          imagesDict[date] = path; // key - date  ,    value - path
        }
        

        然后就可以对imagesDict的key进行排序了

        NSArray *sortedDates = [[imagesDict allKeys]  sortedArrayUsingSelector:@selector(compare:)];
        

        然后您可以为 sortedDates 项目创建循环并按图像的日期路径排序

        for(NSDate *newDate in sortedDates)
        {
          NSString newPath = imagesDict[newDate];
        }
        

        【讨论】:

          【解决方案4】:

          另一种解决方案:

          -(NSArray *)orderedFileListByModificationDate{
          
              NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
              NSString *dirPath = [paths objectAtIndex:0];
              dirPath=[dirPath stringByAppendingString:@"/imgs"];
          
              NSFileManager *fileManager=[[NSFileManager alloc] init];
              NSDateFormatter *formatter=[[NSDateFormatter alloc] init];
              [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss zz"];
          
              int filesCount;
              NSArray *directoryContent = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:dirPath error:NULL];
              int dirFilesCount=(int)[directoryContent count];
              NSMutableArray *fileObjects=[NSMutableArray array];
              for (filesCount = 0; filesCount < dirFilesCount; filesCount++)
              {
                  NSString *fileName=[directoryContent objectAtIndex:filesCount];
                  NSString *filePath =[NSString stringWithFormat:@"%@/%@",dirPath,fileName];
          
                  NSDictionary *fileAttributes=[fileManager attributesOfItemAtPath:filePath error:nil];
                  NSDate *dateModiftication=[fileAttributes valueForKey:@"NSFileModificationDate"];
          
                  NSMutableDictionary *datesAndFilesDict=[[NSMutableDictionary alloc] initWithCapacity:2];
                  [datesAndFilesDict setValue:fileName forKey:@"fileName"];
                  [datesAndFilesDict setValue:dateModiftication forKey:@"date"];
          
                  [fileObjects addObject:datesAndFilesDict];
              }
          
              NSLog(@"%@",fileObjects);
              NSArray *newOrderedFileList = [fileObjects sortedArrayUsingComparator:
                                                      ^(id obj1, id obj2) {
                                                          NSDate *dateOne=[(NSDictionary*)obj1 valueForKey:@"date"];
                                                          NSDate *dateTwo=[(NSDictionary*)obj2 valueForKey:@"date"];
                                                          NSComparisonResult result=[dateOne compare:dateTwo];
                                                          return result;
                                                      }];
              NSLog(@"%@",newOrderedFileList);
              //Now you've an array of dictionaries where you can pick the filename with the "fileName" key.
              return newOrderedFileList;
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-09-15
            • 2018-08-19
            • 1970-01-01
            • 2021-09-07
            • 2010-09-26
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多