Загрузка CoreData (чтение) возвращает список без последнего элемента при повторном открытии - PullRequest
0 голосов
/ 02 августа 2020

Моя Favorite сущность имеет следующие атрибуты:

id: UUID

title: String

author: String

source: String

cover_image: String

article_url: String

У меня есть следующие функции создания и чтения (загрузки) для добавления в избранное статьи:

func createFavoriteArticle(post: Post){
        
        guard let appDelegate =
            UIApplication.shared.delegate as? AppDelegate else {
                return
        }
        
        let managedContext =
            appDelegate.persistentContainer.viewContext
        
        let entity =
            NSEntityDescription.entity(forEntityName: "Favorite",
                                       in: managedContext)!
        
        let newArticle = NSManagedObject(entity: entity,
                                         insertInto: managedContext)
        
        let title = post.title
        let author = post.author
        let source = post.source
        let cover_image = post.cover_image
        let article_url = post.article_url
        
        newArticle.setValue(title, forKeyPath: "title")
        newArticle.setValue(author, forKeyPath: "author")
        newArticle.setValue(source, forKeyPath: "source")
        newArticle.setValue(cover_image, forKeyPath: "cover_image")
        newArticle.setValue(article_url, forKeyPath: "article_url")
        
        if self.articleIsFavorited(post: post) {
            print("Article has already been favorited.")
        } else {
            do {
                try managedContext.save()
                print("Favorite article saved successfully")
            } catch let error as NSError {
                print("Could not save favorite article. \(error), \(error.userInfo)")
            }
        }
        
}
    
func loadFavoriteArticleList()->[Post]{
        guard let appDelegate =
            UIApplication.shared.delegate as? AppDelegate else {
                print("AppDelegate error accessing favorite articles for loadFavoriteArticleList()")
                return []
        }
        
        let managedContext =
            appDelegate.persistentContainer.viewContext
        
        let fetchRequest =
            NSFetchRequest<NSManagedObject>(entityName: "Favorite")
        
        do {
            let keyResult = try managedContext.fetch(fetchRequest)
            
            if keyResult.count == 0 {
                return []
            } else {
                var postList: [Post] = []
                var id: Int = 0
                for data in keyResult {
                    let title = data.value(forKey: "title") as! String
                    let author = data.value(forKey: "author") as! String
                    let source = data.value(forKey: "source") as! String
                    let cover_image = data.value(forKey: "cover_image") as! String
                    let article_url = data.value(forKey: "article_url") as! String
                    let post = Post(id: id, category: "no", title: title, author: author, source: source, cover_image: cover_image, description: "no", article_url: article_url, content: "no", created_at: "no", other_notes: "no")
                    postList.append(post)
                    id += 1
                    
                }
                return postList
            }
        } catch let error as NSError {
            print("Could not fetch favorite article list. \(error), \(error.userInfo)")
            return []
        }
        
}

Они отлично работают прежде чем я снова открою приложение: loadFavoriteArticleList() вернет список статей, которые мне нравились только сейчас и в предыдущих сборках. Однако, когда я снова открываю приложение, loadFavoriteArticleList() вернет только список избранных статей без последней (т.е. если я добавил в избранное 4 статьи, он вернет только первые 3 статьи по временной последовательности).

Кто-нибудь знает, почему это произошло? Я много раз пытался отладить, но не могу понять, почему. Заранее спасибо, ребята!

...