2013-05-17 1 views
0

Я извлекаю изображение и его информацию (происхождение и некоторую другую информацию) из Интернета. Как я могу сохранить это на iPhone? Я видел использование NSFileManager для хранения изображений, но как я могу хранить изображение и другую информацию с ним? Должен ли я использовать NSDictionary и такие ключи, как - изображение, происхождение, информация, а затем сохранить этот словарь в NSMutableArray, а затем сохранить этот массив в NSFileManager ?? Или есть другой способ? И небольшой намек на доступ к этим сохраненным изображениям и соответствующей информации был бы приятным.Сохранить изображение и информацию об изображении на iPhone

Спасибо.

+0

попробовать эту ссылку http://stackoverflow.com/questions/6238139/ios-download-and-save-image-inside-app – iDeveloper

+0

я получил некоторый код для хранения только изображения, но и о том, что «спаривание» информации с изображением и хранением, чтобы узнать, какая информация принадлежит какому изображению, вот что мне нужно. Спасибо, в любом случае. – user1832330

+0

Вы говорите об [хранении изображения и его данных exif] (http://stackoverflow.com/a/5294574/1407017)? – Amar

ответ

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"]]); 
} 
+0

Спасибо большое. Это выглядит очень хорошо, проверит его и сообщит вам, как это работает. Благодарю. – user1832330

+0

Просто еще одна вещь, пожалуйста, мне действительно нужно. Теперь, если я хочу получить доступ к этому изображению из пути и установить его как фон UIImageView * imgView, как я могу это достичь? И как я могу получить доступ к тому же самому образцу «дата» (который вы укажете в качестве примера)? Спасибо. – user1832330

+0

yes date is example key, для установки в качестве фона я обновляю свой код, но вы должны знать ключ для этого изображения, который вы хотите установить как фон. –

0

Много способов есть в зависимости upong ваших требований

1) SQLITE: Сэкономьте изображения мета данных в таблице вместе с именем файла в строке

2) NSUserDefaults: Если количество изображений довольно не более

3) Текстовый файл: Напишите данные, разделенные новой строкой, что также не должно быть сложно, снова зависит от ваших требований.

Надеюсь, это поможет.

+0

20 изображений слишком много для userdefault? – user1832330

+0

Должно быть хорошо. – Devang

0

Вы определенно должны использовать CoreData и папку приложения документов, как это:

  1. Загрузка данных с сервера: изображения и другие данные
  2. Сохранить изображение в приложении документов.Папка с сгенерированным именем (если у вас еще нет имени изображения с сервера)
  3. Создайте таблицу CoreData (или несколько таблиц) в зависимости от ваших потребностей и укажите там имя изображения и остальные свойства. 4 Когда вы пытаетесь загрузить данные, вы можете извлечь данные из основной таблицы данных и загрузить изображение из каталога документов.

Я думаю, что это самый лучший и простой способ сделать это, если вы загружаете изображения только один раз.

Если вы хотите загрузить различные изображения или обновить изображения, вы можете использовать один и тот же процесс с упоминанием о том, что вы не должны сохранять изображения в папке с документами, вам просто нужно использовать библиотеку AsyncImageDownload (много их) для загрузите изображения, и вы должны сохранить URL-адрес изображения в своей базе данных.