Как сохранить массив путей к изображениям локально и восстановить их с помощью NSUserDefaults в UICollectionView? - PullRequest
0 голосов
/ 21 июня 2020

В настоящее время я работаю над фотогалереей, используя Swift 4.2 в Xcode 10. У меня есть приложение, в котором можно узнать, как сохранить массив путей UIImages локально и получить его для отображения в UICollectionViewCell. Изображения выбираются из библиотеки фотографий с помощью UIImagePickerDelegates. Затем они сохраняются в классе модели с именем Person. Доступ к классу модели будет осуществляться для отображения изображений в UIImageView внутри UICollectionView. Проблема, с которой я сталкиваюсь, заключается в том, что когда я закрываю приложение или ухожу с этого конкретного экрана UIS на другой и снова возвращаюсь на экран PhotoGallery, все загруженные изображения будут потеряны / стерты. Мне нужно как-то сохранить их на экране галереи. Итак, в настоящее время у меня есть идея относительно UserDefaults для хранения данных, их сохранения и восстановления. Я действительно не знаю, как именно это реализовать здесь. Ниже приведены мои коды.

//Model Class for UIImage
class Person: NSObject {
        var image: String
        init(image: String) {
            self.image = image}}

//View Class
class PersonCell: UICollectionViewCell {
    @IBOutlet var delete: UIVisualEffectView!
    @IBOutlet var imageView: UIImageView!
    weak var delegate: PhotoCellDelegate?}

//ViewController for selecting the images and store them in directory. In this portion i need to implement the setObject function using UserDefaults to store the array of image paths.

let people = [Person]()  
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
            guard let Image = info[.editedImage] as? UIImage else { return }
            let imageName = UUID().uuidString
            let imagePath = getDocumentsDirectory().appendingPathComponent(imageName)
            if let jpegData = Image.jpegData(compressionQuality: 0.8){
                try? jpegData.write(to: imagePath)
            }
            let person = Person(image: imageName)
            // The people array below needs to be stored in UserDefaults
            people.append(person)
            collectionView.reloadData()
            dismiss(animated: true) }
    
 

   func getDocumentsDirectory() -> URL
    {
        let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
        return paths[0]
    }

//In this portion I need to get the image paths and set the images and retain them using UserDefaults.

override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Person", for: indexPath) as? PersonCell else {
            fatalError("Hello")
        }
        let longpress = UILongPressGestureRecognizer(target: self, action: #selector(longgpress(sender: )))
        cell.addGestureRecognizer(longpress)
        let person = people[indexPath.item]
        //The UserDefaults should fetch the data image 
        paths and set it here to the cells. 
        let path = getDocumentsDirectory().appendingPathComponent(person.image)
        cell.imageView.image = UIImage(contentsOfFile: path.path)
        cell.delete.layer.cornerRadius = cell.delete.bounds.width / 2
        cell.delete.layer.masksToBounds = true
        cell.delegate = self
        cell.delete.isUserInteractionEnabled = false
        cell.delete.isHidden = true
        return cell}

Можно ли сохранить массив путей к изображениям в массиве с помощью UserDefaults и восстановить его позже? как мне это сделать? Заранее спасибо.

...