2017-02-02 3 views
1

У меня есть словарь offlineImages = [String: UIImage](), и я хочу сохранить его в CoreData/UserDefaults. Как я могу это сделать и что является лучшим выбором?Как хранить словарь типа [String: UIImage] в CoreData/UserDefaults?

Пробовал с помощью файловой системы, но изображения не будут показывать (offlineImages массива содержит локальные URL-адрес для изображений):

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "offlineCell") 
    let mainImageView = cell?.viewWithTag(2) as! UIImageView 
    let mainImageURL = offlineImages[indexPath.row] 
    let mainImageData = NSData(contentsOf: mainImageURL) 
    let mainImage = UIImage(data: mainImageData! as Data) 
    mainImageView.image = mainImage 
    return cell! 
} 
+0

Не , Запишите изображения в файловую систему. И никогда не записывайте столько данных в NSUserDefaults. Это предназначено для небольших бит данных. – rmaddy

+0

@rmaddy, и как я могу хранить его в CoreData? – abcd

+2

У вас нет. Запись изображений в файловую систему. Просто храните имена файлов в основных данных. – rmaddy

ответ

0

В .xcdatamodeld файла создать атрибут для словаря с типом трансформируемым. Тогда в генерируемой Entity типа изменения подкласса от ид в словарь

+0

Извините, я не понимаю, что означает «сгенерированный подкласс CoreData». – abcd

+0

После того, как вы создали свои объекты с атрибутами, вам нужно создать подклассы для них. Ты сделал это? – Artem

+0

Пока нет. Я не знаю, как использовать CoreData. Я видел учебник, но это было просто для Струнов. – abcd

-1

Вы можете конвертировать изображения в NSData и хранить в CoreData (Binary Data), как этот

NSData *imageData = UIImagePNGRepresentation(image); 

[selectedObject setValue:imageData forKey:@"imageEntity"]; // selectedObject refers to NSManagedObject 

И принести Image

NSManagedObject *selectedObj = [[self fetchedResultsController] objectAtIndexPath:indexPath]; 
UIImage *image = [UIImage imageWithData:[selectedObject valueForKey:@"image"]]; 
[self.imageView setImage:image] 
Смежные вопросы