Моя 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 статьи по временной последовательности).
Кто-нибудь знает, почему это произошло? Я много раз пытался отладить, но не могу понять, почему. Заранее спасибо, ребята!