Основные данные изображений не сохраняются? - PullRequest
0 голосов
/ 27 декабря 2018

Я храню и создаю сообщения с этой функцией в моем контроллере представления:

@objc func createPost(){
        guard let appDelegate =
        UIApplication.shared.delegate as? AppDelegate else {
            return
        }
        let managedContext =
            appDelegate.persistentContainer.viewContext
        let post = Post(context: managedContext)

        var mediaURI: URL?
        let timeInSeconds = Int64((postDate?.timeIntervalSince1970)!)
        if isVideo == true {
            let filename = String(timeInSeconds) + ".MOV"
            FileService.uploadVideo(videoURL: pickedVideoURL, name: filename)
            post.mediaFilename = filename
        } else {
            let filename = String(timeInSeconds) + ".JPG"
            FileService.uploadImage(image: postImage, name: filename)
            post.mediaFilename = filename
        }
        var postTags:[Tag] = []

        if let tokens = tagsView.tokens() {
            for token in tokens {
                let tagFetchRequest: NSFetchRequest<Tag> = Tag.fetchRequest()
                tagFetchRequest.predicate = NSPredicate(format: "name == %@", token.title)
                do {
                    let res = try managedContext.fetch(tagFetchRequest)
                    var tag: Tag!
                    if res.count > 0 {
                        tag = res.first
                    } else {
                        tag = Tag(context: managedContext)
                        tag.name = token.title
                        tag.mostRecentUpdate = NSDate()
                        tag.mostRecentThumbnail = postImage?.jpegData(compressionQuality: 1.0) as NSData?
                    }
                    postTags.append(tag)
                } catch let error as NSError {
                    print("Could not fetch. \(error), \(error.userInfo)")
                    return
                }
            }
        }
        for tag in postTags {
            post.addToTags(tag)
        }
        post.isVideo = isVideo!
        post.thumbnail = pickedPostThumbnail?.jpegData(compressionQuality: 1.0) as NSData?
        post.notes = notesView.text
        post.timeStamp = postDate! as NSDate
        do {
            try managedContext.save()
            dismiss(animated: true, completion: nil)
        } catch let error as NSError {
            print("Could not save. \(error), \(error.userInfo)")
        }
    }

Я делаю много вещей там, но, в частности, я устанавливаю post.thumbnail с UIImage как NSData?и в конце я сохраняю контекст.

Итак, я создаю сообщения и закрываю приложение, затем снова открываю его, и другой контроллер представления делает это:

 fileprivate lazy var posts: NSFetchedResultsController<Post> = {
    let appDelegate =
        UIApplication.shared.delegate as? AppDelegate
    let managedContext =
        appDelegate?.persistentContainer.viewContext
    let request: NSFetchRequest<Post> = NSFetchRequest(entityName: "Post")
    request.predicate = NSPredicate(format: "%@ IN self.tags", tag)
    let timeSort = NSSortDescriptor(key: "timeStamp", ascending: true)
    request.sortDescriptors = [timeSort]

    let posts = NSFetchedResultsController(fetchRequest: request, managedObjectContext: managedContext!, sectionNameKeyPath: nil, cacheName: nil)
    posts.delegate = self
    return posts
}()

override func viewDidLoad(){ 
....
do {
        try posts.performFetch()

} catch let error as NSError {
       print("Could not fetch. \(error), \(error.userInfo)")
}
...
}

let post = posts.object(at: indexPath)
cell.mediaFileName = post.mediaFilename
if let data = post.thumbnail {
        print(data,"data?")
        cell.thumbnail.image = UIImage.init(data: data as Data)
    } else {
        print("couldn't find")
    }

Это отлично работает при первых нескольких перезапусках.Однако вскоре он начинает печатать («не удалось найти») и не загружает изображение.Другие поля, связанные с сообщением, все еще загружаются.Это выполняется на симуляторе iPhone 8, который поставляется с Xcode.

Что я здесь не так делаю?Есть ли что-то в том, как симулятор хранит изображения в основных данных, которые не сохраняются?Или я неправильно использую управляемый контекст?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...