1

我有一个 tableView,对于每个单元格,我得到一个图像 url 字符串,并且我将所有数据保存在 NSDocument 目录中。

我想将所有数据存储在 NSDocument 目录中创建的文件夹中,并且我还想稍后删除该文件夹中的所有内容。怎么做?

这是我正在使用的方法

(void)setThumbnailTo :(UITableViewCell *)cell withRefString:(NSString *)string   {


   NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 

   NSString *documentsDirectory = [paths objectAtIndex:0]; 


   NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@"patientPhotoFolder"];


   NSString *imgPath = [string stringByReplacingOccurrencesOfString:@"amp;" withString:@""];

   imgPath = [imgPath stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

   NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];

   NSString *key = [self sha1:imgPath];

   NSString *fileToSave = [documentsPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.jpg",key]];


   BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:fileToSave];
   if (!fileExists)
   {
       dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0ul);
        dispatch_async(queue, ^{
            NSData *imageData=[NSData dataWithContentsOfURL:[NSURL URLWithString:imgPath]];


            UIImage *image = [[UIImage alloc] initWithData:imageData];

            NSData *jpegData = UIImageJPEGRepresentation(image,4);

            [[NSFileManager defaultManager] createFileAtPath:fileToSave contents:jpegData attributes:nil];

            dispatch_sync(dispatch_get_main_queue(), ^{
               patientPhoto.image = image;
            });
        });
        patientPhoto.image = [UIImage imageNamed:@"patientPhoto.png"];
    }else{
        UIImage *image = [UIImage imageWithContentsOfFile:fileToSave];
        if(!image) image = [UIImage imageNamed:@"patientPhoto.png"];
        patientPhoto.image = image;
    }
}
4

1 回答 1

8

如何在 Documents 目录中懒惰地创建一个名为“patientPhotoFolder”的文件夹(例如,这可能是一个类别NSFileManager

- (NSString *)pathToPatientPhotoFolder {
    NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                                                                    NSUserDomainMask,
                                                                    YES) lastObject];
    NSString *patientPhotoFolder = [documentsDirectory stringByAppendingPathComponent:@"patientPhotoFolder"];

    // Create the folder if necessary
    BOOL isDir = NO;
    NSFileManager *fileManager = [[NSFileManager alloc] init];
    if (![fileManager fileExistsAtPath:patientPhotoFolder
                           isDirectory:&isDir] && isDir == NO) {
        [fileManager createDirectoryAtPath:patientPhotoFolder
               withIntermediateDirectories:NO
                                attributes:nil
                                     error:nil];
    }
    return patientPhotoFolder;
}

如何删除该文件夹的内容(假设您将其作为类别实现NSFileManager):

NSString *patientPhotoFolder = [[NSFileManager defaultManager] pathToPatientPhotoDirectory];
NSArray *contents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:patientPhotoFolder error:nil];
for (NSString *filename in contents)  {
    [[NSFileManager defaultManager] removeItemAtPath:[patientPhotoFolder stringByAppendingPathComponent:filename] error:NULL];
}
于 2012-12-12T11:13:05.120 回答