0

我从网上检索图像及其信息(来源和其他一些信息)。我怎样才能将它存储在 iPhone 上?我看到使用 NSFileManager 来存储图像,但是如何使用它来存储图像和其他一些信息?我应该使用 NSDictionary 和诸如图像、原点、信息之类的键,然后将该字典存储到 NSMutableArray,然后将该数组存储到 NSFileManager 吗?还是有其他方法?访问那些保存的图像和相应信息的小提示会很好。

谢谢。

4

3 回答 3

1
// Download Image from Remote Server
NSURL *url = [NSURL URLWithString:@"Your IMAGE URL HERE"];
NSData *data = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"moon" ofType:@"jpg"]];

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
NSString *libPath = [paths objectAtIndex:0];
NSString *filePath = [libPath stringByAppendingPathComponent:[url lastPathComponent]];
BOOL status = [data writeToFile:filePath atomically:YES];
// Save Image file to Library Directory, if success then store infor about it in file
if(status)
{
    // If File Exist then read it otherwise creat new
    NSMutableDictionary *imageInfoDict;
    if([[NSFileManager defaultManager] fileExistsAtPath:[libPath stringByAppendingPathComponent:@"imageInfo.plist"]])
    {
        NSData *fileData = [NSData dataWithContentsOfFile:[libPath stringByAppendingPathComponent:@"imageInfo.plist"]];
        imageInfoDict = [NSMutableDictionary dictionaryWithDictionary:[NSKeyedUnarchiver unarchiveObjectWithData:fileData]];

        // To set As Background Load image from disc
        // Read filename from Dictionary, but you must know the key which you want to get
        NSString *fileName = imageInfoDict[@"68051_10151509108346729_1731694342_s.png"][@"imagePath"];
        // Set your image as background
        UIImage *image = [UIImage imageWithContentsOfFile:[libPath stringByAppendingPathComponent:fileName]];
    }
    else
        imageInfoDict = [NSMutableDictionary dictionaryWithCapacity:0];

    // Create Dictionary to store Single Image Info
    NSDictionary *imageInfo = [NSDictionary dictionaryWithObjectsAndKeys:[url lastPathComponent], @"imagePath",
                               [url lastPathComponent], @"imageName",
                               [NSDate date], @"date",nil];
    // Add Single Image Info to Main Dictionary
    [imageInfoDict setValue:imageInfo forKey:[url lastPathComponent]];

    // Convert Main info Dictionary to `NSData` to Save on Disc
    NSData *fileData = [NSKeyedArchiver archivedDataWithRootObject:imageInfoDict];
    // Save file to Disc
    [fileData writeToFile:[libPath stringByAppendingPathComponent:@"imageInfo.plist"] atomically:YES];

    // Read Info From File
    NSLog(@"%@",[NSDictionary dictionaryWithContentsOfFile:[libPath stringByAppendingPathComponent:@"imageInfo.plist"]]);
}
于 2013-05-17T10:19:17.563 回答
0

根据您的要求,有很多方法

1)SQLITE:将图像元数据与文件名一起保存在表格中

2) NSUserDefaults :如果图像数量非常少

3)文本文件:用新行分隔给你的数据,这也应该不难,再次取决于你的要求。

希望这可以帮助。

于 2013-05-17T09:44:11.857 回答
0

您绝对应该像这样使用 CoreData 和 app 文档文件夹:

  1. 从服务器下载数据:图像和其他数据
  2. 使用生成的名称将图像保存在应用程序文档文件夹中(如果您还没有来自服务器的图像名称)
  3. 根据您的需要创建一个 CoreData 表(或多个表),并在其中设置图像名称和其余属性。4 当您尝试加载数据时,您可以从核心数据表中获取数据并从文档目录加载图像。

如果您只下载一次图像,我认为这是最好和最简单的方法。

如果您想下载不同的图像或更新图像,您可以使用相同的过程并提及您不应该将图像保存在文档文件夹中,您只需要使用 AsyncImageDownload 库(其中很多)来下载图像和您必须将图像 URL 存储在数据库中。

于 2013-05-17T10:10:14.323 回答