首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在NSDocumentDirectory中唯一保存

在NSDocumentDirectory中唯一保存
EN

Stack Overflow用户
提问于 2012-07-11 14:15:03
回答 3查看 324关注 0票数 0

嗨,顺便说一句,我真的很难用AGImagePicker把我的NSDocumentDirectory.Im存起来。是的,我能够将它保存在NSDocumentDirectory中。但是如何唯一地保存它们(就它们自己的而言,然后将它们的名字转换成oneSlotImages),或者用它们唯一的ID保存它们,然后再重新加载它们。对不起,我对UIImagePickerControllerMediaURL这个东西有点陌生,我想这可能是我的另一个问题的解决方案,因为我在保存时没有覆盖它们。如何使用其唯一ID或UIImagePickerControllerMediaURL保存此文件。

代码语言:javascript
复制
        for (int i = 0; i < info.count; i++) {
            NSLog(@"%@", [info objectAtIndex:i]);
            NSArray *paths = NSSearchPathForDirectoriesInDomains( NSDocumentDirectory,    NSUserDomainMask ,YES );
            NSString *documentsDir = [paths objectAtIndex:0];
            NSString *savedImagePath = [documentsDir stringByAppendingPathComponent:[NSString stringWithFormat:@"oneSlotImages%d.png", i]];


            ALAssetRepresentation *rep = [[info objectAtIndex: i] defaultRepresentation];
            UIImage *image = [UIImage imageWithCGImage:[rep fullResolutionImage]];

            //----resize the images
            image = [self imageByScalingAndCroppingForSize:image toSize:CGSizeMake(256,256*image.size.height/image.size.width)];

            NSData *imageData = UIImagePNGRepresentation(image);
            [imageData writeToFile:savedImagePath atomically:YES];

谢谢你的帮助。非常感谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-11 14:42:14

每个图像的URL都是唯一的,对吧?所以我们可以利用这个。将URL转换为MD5字符串(形成每个图像的唯一标识符)。并使用该名称保存(如"MD5string.png")。

为什么我们不能用这个?希望这对你有帮助。

要转换为MD5,请创建一个名为NSString+MD5.h的文件,并将代码

代码语言:javascript
复制
#import <Foundation/Foundation.h>
#import <CommonCrypto/CommonDigest.h>


@interface NSString(MD5)

- (NSString *)MD5;

@end

在里面。然后在NSString+MD5.m中,

代码语言:javascript
复制
#import "NSString+MD5.h"

@implementation NSString(MD5)

- (NSString*)MD5
{
    const char *ptr = [self UTF8String];

    unsigned char md5Buffer[CC_MD5_DIGEST_LENGTH];

    CC_MD5(ptr, strlen(ptr), md5Buffer);
    NSMutableString *output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
    for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) 
        [output appendFormat:@"%02x",md5Buffer[i]];

    return output;
}
@end

NSString+MD5.h类导入到任何需要将MD5函数与普通NSString对象一起使用的地方。

在您的代码中,如果您有UIImagePickerControllerMediaURL字符串,因为它对于每个文件都是唯一的,您可以将其转换为MD5字符串,如下所示

代码语言:javascript
复制
NSString *imgURL    = [NSString stringWithString: UIImagePickerControllerMediaURL];
NSString *MD5String = [imgURL MD5];
NSString *savedImagePath = [documentsDir stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.png", MD5String]];

使用该路径保存图像文件。

加载时,

UIImagePickerControllerMediaURL转换为MD5并签入文件的Documents目录

代码语言:javascript
复制
// In this the UIImagePickerControllerMediaURL is the URL of media file to load
NSString *imgURL    = [NSString stringWithString: UIImagePickerControllerMediaURL];
NSString *MD5String = [imgURL MD5];
NSString *savedImagePath = [documentsDir stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.png", MD5String]];

然后使用NSFileManager的fileExistsAtPath方法进行检查,如果存在,则从路径加载文件。就是这样。

注意:为此,您希望将保存在documents目录中的图像的UIImagePickerControllerMediaURL保存在应用程序的本地某个地方(在DB或NSUserDefaults中),以便在加载时使用。

票数 0
EN

Stack Overflow用户

发布于 2012-07-11 14:45:10

您可以始终保留一个使用名称的列表,并执行以下操作

代码语言:javascript
复制
int i = 1;

while([listOfUsedNames containsObject:nextAvailableTile]) {

      nextAvailableTitle = [kDefaultImageName stringByAppendingFormat:@" %d", i];
      i++;
}

//发现未使用的名称

票数 1
EN

Stack Overflow用户

发布于 2012-07-11 14:56:01

试试这个:

代码语言:javascript
复制
NSMutableString *imageName = [[[NSMutableString alloc] initWithCapacity:0] autorelease];

CFUUIDRef theUUID = CFUUIDCreate(kCFAllocatorDefault);
if (theUUID) {
    [imageName appendString:NSMakeCollectable(CFUUIDCreateString(kCFAllocatorDefault, theUUID))];
            CFRelease(theUUID);
}
[imageName appendString:@".png"];
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11426609

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档