Сохранение / перезагрузка изображений и удаление старых изображений - PullRequest
2 голосов
/ 18 мая 2011

Я загружаю файл изображения с веб-сервера, а затем сохраняю его в nsuserdefaults. код сохранения примерно:

NSData *imageData = UIImagePNGRepresentation(theImage); // theImage is a UIImage
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:imageData forKey:string]; // string is a 3-dig number which identifies image

Теперь, видимо, я уже не на том пути, так как изображения не рекомендуются для nsuserdefaults ..

Но я хочу сохранить эти изображения где-нибудь, чтобы к ним можно было обращаться без необходимости их повторной загрузки. Кроме того, я хотел бы удалить старые изображения (скажем, дневные или оставить только последние 10 загруженных изображений)? Есть ли хорошая техника для этого?

Ответы [ 3 ]

3 голосов
/ 18 мая 2011

Когда дело доходит до изображений, я рекомендую сохранять их на диск, в песочнице приложения находится папка «Документы».Вы можете легко сохранить имя файла в userdefaults и использовать его позже для доступа к файлу.

Если вы хотите узнать, слишком ли старое изображение, вы можете сделать что-то вроде этого:*

int aDayInSeconds = 60 * 60 * 24;

NSDictionary *attributes = [[NSFileManager defaultManager] attributesOfItemAtPath:fileName 
                                                                            error:nil];
NSDate *creationDate = [attributes objectForKey:@"NSFileCreationDate"];

if ([[NSDate date] timeIntervalSinceDate:creationDate] > aDayInSeconds) {
    // Delete, reload, whatever you need.
}
3 голосов
/ 18 мая 2011

В зависимости от вашей цели, есть несколько мест, где вы можете сохранить загруженные изображения:

  • Если вы хотите сохранить файл, пока не удалите его, напишите в каталог документов: [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]
  • Если вы хотите сохранить файл до тех пор, пока не удалите его, и вы можете когда-либо использовать общий доступ к файлам iTunes и не хотите, чтобы эти конкретные файлы передавались совместно, напишите в каталог поддержки приложений: [NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES) objectAtIndex:0]
  • Если вы хотите разрешить системе удалить его, если на устройстве недостаточно места (и не волнует, сохраняется ли оно при резервном копировании устройства), используйте каталог caches: [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0]
  • Если вы просто временно сохраните его во время обработки и сразу удалите его, используйте временный каталог: NSTemporaryDirectory()

Если вы хотите, чтобы какие-либо правила хранения, такие как «сохранить только 10» или «удалить через один день», вам придется реализовать в своем коде самостоятельно. Вы можете полагаться на даты изменения файла (из attributesOfItemAtPath:error: в NSFileManager), или сохранить отображение имени файла в NSUserDefaults или Core Data, или просто назвать файлы, чтобы включить дату.

2 голосов
/ 18 мая 2011

Я бы использовал превосходную библиотеку ASIHTTPRequest , чтобы загрузить изображение в первую очередь:)

Это заменяет NSURLConnection, и вы можете указать, как кэшировать изображения - вы просто запросите изображения с того же URL-адреса, и ASIHTTPRequest вернет кэшированные.

...