Храните UIImage в памяти iPhone через NSUserDefaults - PullRequest
0 голосов
/ 24 августа 2011

Я использую библиотеку ASIHTTPRequest для загрузки изображения. Я сохраняю свое изображение в NSMutableDictionnary (ключ = url, значение = UIImage), что позволяет мне загрузить один раз нужную мне картинку для каждого из моих просмотров.Эта часть работает хорошо.

Теперь я хочу сохранить свой NSMutableDictionnary с именем "imagesDownloaded" в памяти iPhone, чтобы загрузить один раз каждое изображение для всех моих приложений, я делаю это благодаря этому коду

UIImage *img = [[UIImage alloc] initWithData:[request responseData]];
[imagesDownloaded setValue:img forKey:request.url.description];
userDatas = [NSUserDefaults standardUserDefaults];
[userDatas setValue:imagesDownloaded forKey:@"Pictures"];
[userDatas synchronize];

Но это не работает, когда я делаю:

NSLog(@"%@", [userDatas objectForKey:@"Pictures"]);

Значение всегда равно "null".

Что не так?

Спасибо

Ответы [ 3 ]

1 голос
/ 24 августа 2011

Как говорили другие, вы не можете сохранить изображение непосредственно в NSUserDefaults.

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

Лучший способ сделать это - сохранить изображение в виде файла в файловой системе iOS, а затемВы просто сохраняете путь изображения в NSUserDefaults.

0 голосов
/ 24 августа 2011

Объект, который вы сохраняете по умолчанию для пользователя (и все его дочерние элементы), должен иметь тип объекта plist или, другими словами, NSData, NSString, NSNumber, NSDate, NSArray или NSDictionary.

Недавно я сделал что-то похожее на это, что включает в себя такой код для хранения элемента:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSData *myEncodedObject = [NSKeyedArchiver archivedDataWithRootObject:appSettings];
[prefs setObject:myEncodedObject forKey:@"appSettings"];
[prefs synchronize];

Мой класс appSettings требовал, чтобы я создал методы encodeWithCoder и initWithCoder, но как только я это сделал, я смог поместить класс в пользовательские значения по умолчанию.

0 голосов
/ 24 августа 2011

Вы не можете сохранить изображение непосредственно в NSUserDefaults. Из документации :

Класс NSUserDefaults предоставляет удобные методы для доступа общие типы, такие как числа с плавающей запятой, двойные числа, целые числа, логические значения и URL объект по умолчанию должен быть списком свойств, то есть экземпляром (или для коллекций комбинация экземпляров): NSData, NSString, NSNumber, NSDate, NSArray или NSDictionary. Если вы хотите хранить какие-либо другой тип объекта, вы обычно должны заархивировать его, чтобы создать экземпляр NSData.

Поскольку у вас уже есть данные для изображения ([request responseData]), попробуйте сохранить их в значения по умолчанию. Вы также можете попробовать поместить объекты NSData непосредственно в ваш массив, а не объекты UIImage, а затем сохранить их.

Чтобы узнать больше об использовании пользовательских настроек по умолчанию, ознакомьтесь с Apple Темы программирования пользовательских настроек по умолчанию

...