iPhone - свойства списка файлов - PullRequest
0 голосов
/ 12 ноября 2010

У меня есть mutableArray, который отображает список файлов в табличном представлении.Я сохранил эти файлы в каталоге.

Я использую класс NSfileManager и метод attributesOfItemAtPath для получения некоторых свойств файлов, таких как fileSize, fileType ..

На втором этапе я пытаюсь использовать контроллер DetailView, которыйотображает свойства конкретного файла при касании в tableView.

Проблема в том, что я не знаю, как связать эти свойства, такие как fileSize и fileType, отдельно с NSDictionary и заставить его отображаться в detailView для этого конкретного файла.

Вот мой исходный код для перечисления файлов и для перечисления свойств.

- (void)listFiles {

    NSFileManager *fm =[NSFileManager defaultManager];
    NSError *error = nil;
    NSString *parentDirectory = @"/Users/akilan/Documents";
    NSArray *paths = [fm contentsOfDirectoryAtPath:parentDirectory error:&error];
    if (error) {
        NSLog(@"%@", [error localizedDescription]);
        error = nil;
    }
    directoryContent = [[NSMutableArray alloc] init];
    for (NSString *path in paths){
        NSString *documentsDirectory = [[path lastPathComponent] stringByDeletingPathExtension];
        [directoryContent addObject:documentsDirectory];
    }
}

-(void) willProcessPath {
    NSString *parentDirectory = @"/Users/akilan/Documents";
    NSArray *paths = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:parentDirectory error:nil];
    for (NSString *path in paths){
        filesPath = [parentDirectory stringByAppendingPathComponent:path];
        NSDictionary *attrDir = [[NSFileManager defaultManager]attributesOfItemAtPath:filesPath error:nil];
        filesSize = [attrDir objectForKey:NSFileSize];
        filesName = (NSString *)directoryContent;
        filesType = [path pathExtension];
        createdDate = [attrDir objectForKey:NSFileCreationDate];
        modifiedDate = [attrDir objectForKey:NSFileModificationDate];
    }
}

Пожалуйста, помогите мне перейти к следующему шагу .. Заранее спасибо ..

Ответы [ 4 ]

1 голос
/ 12 ноября 2010

Попробуйте что-то вроде этого:

- (void)viewDidLoad {
    [super viewDidLoad];

    [self listFiles];
}



- (void)listFiles {

    NSFileManager *fm =[NSFileManager defaultManager];
    NSError *error = nil;
    NSString *parentDirectory = [self getDocumentsPath];
    NSArray *paths = [fm contentsOfDirectoryAtPath:parentDirectory error:&error];

    if (error) {
        NSLog(@"%@", [error localizedDescription]);
        error = nil;
    }

    NSMutableArray *array = [[NSMutableArray alloc] init];
    self.directoryContent = array;
    [array release];

    for (NSString *path in paths){
        NSString *fullPath = [self getPathToFileInDocumentsDirectory:path];
        NSMutableDictionary *filePropertiesDictionary = [NSMutableDictionary dictionaryWithDictionary:[[NSFileManager defaultManager] attributesOfItemAtPath:fullPath error:nil]];
        [filePropertiesDictionary setObject:fullPath forKey:@"fullPath"];
        [filePropertiesDictionary setObject:path forKey:@"fileName"];
        [directoryContent addObject:filePropertiesDictionary];
    }
    NSLog(@"%@", directoryContent);
}

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

    return documentsDirectoryPath;  
}
- (NSString *)getPathToFileInDocumentsDirectory:(NSString *)fileName {
    return [[self getDocumentsPath] stringByAppendingPathComponent:fileName];
}
0 голосов
/ 12 ноября 2010
- (void)listFiles {

    NSFileManager *fm =[NSFileManager defaultManager];
    NSError *error = nil;
    NSString *parentDirectory = @"/Users/akilan/Documents";
    NSArray *paths = [fm contentsOfDirectoryAtPath:parentDirectory error:&error];
    if (error) {
        NSLog(@"%@", [error localizedDescription]);
        error = nil;
    }
    directoryContent = [[NSMutableArray alloc] init];
    for (NSString *path in paths){
        NSString *documentsDirectory = [[path lastPathComponent] stringByDeletingPathExtension];
        [directoryContent addObject:documentsDirectory];
    }
}

-(void) willProcessPath {
    NSString *parentDirectory = @"/Users/akilan/Documents";
    NSArray *paths = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:parentDirectory error:nil];
    for (NSString *path in paths){
        filesPath = [parentDirectory stringByAppendingPathComponent:path];
        NSDictionary *attrDir = [[NSFileManager defaultManager]attributesOfItemAtPath:filesPath error:nil];
         filesDirectory = [NSDictionary dictionaryWithObjectsAndKeys:filesSize, [attrDir objectForKey:NSFileSize],
                      filesName, (NSString *)directoryContent, filesType, [path pathExtension],
                      createdDate, [attrDir objectForKey:NSFileCreationDate],
                      modifiedDate, [attrDir objectForKey:NSFileModificationDate], nil];
        NSLog(@"%@", filesDirectory);
    }
}
0 голосов
/ 12 ноября 2010
#import <UIKit/UIKit.h>

@interface MyFilesList : UIViewController <UITableViewDelegate, UITableViewDataSource> {
    NSMutableArray *directoryContent;
    IBOutlet UITableView *filesTable;
    IBOutlet NSNumber *filesSize;
    IBOutlet NSString *filesName;
    IBOutlet NSString *filesType;
    IBOutlet NSString *filesPath;
    IBOutlet NSDate *createdDate;
    IBOutlet NSDate *modifiedDate;
    NSMutableDictionary *filesDirectory;
}

@property (nonatomic, retain) NSMutableArray *directoryContent;
@property (nonatomic, retain) IBOutlet UITableView *filesTable;
@property (nonatomic, retain) IBOutlet NSNumber *filesSize;
@property (nonatomic, retain) IBOutlet NSString *filesName;
@property (nonatomic, retain) IBOutlet NSString *filesType;
@property (nonatomic, retain) IBOutlet NSString *filesPath;
@property (nonatomic, retain) IBOutlet NSDate *createdDate;
@property (nonatomic, retain) IBOutlet NSDate *modifiedDate;
@property (nonatomic, retain) NSMutableDictionary *filesDirectory;

- (void)listFiles;
- (void) willProcessPath;
@end
0 голосов
/ 12 ноября 2010

Почему бы не создать класс "FileDescriptor" со следующими свойствами:

NSString *fileName;
NSString *fileSize;
NSString *fileType;
NSDate *createdDate;
NSDate *modifiedDate;

При переборе по каталогу вы создаете экземпляр этого класса для каждого файла и сохраняете его в массиве (илисловарь, если хотите).Затем вы можете использовать этот массив для

a) предоставления данных для ваших UITableViewCells

b) отображения подробного представления для каждого файла при нажатии на ячейку.

Если вы хотитевместо этого, чтобы использовать словарь (который, я думаю, гораздо менее «чистый»), вы можете сделать это так:

NSDictionary *fileProperties = [NSDictionary dictionaryWithObjectsAndKeys:
  fileSize, @"fileSize", 
  fileName, @"fileName", nil]; 
...