如何处理具有核心数据的社交时间轴的对象?
现在,从网络请求返回的每个Post对象都保存到核心数据中。因此,当加载随机用户的个人资料时,他们的帖子将被保存,这意味着它们会出现在当前用户的时间轴中(即使当前用户未关注它们)。
我的时间轴是NSFetchedResultsController,用于提取所有已保存的帖子,包括当前用户不关注的用户创建的帖子。
我应该只将属于时间轴的帖子保存到核心数据吗?
或者是否可以将时间轴的核心数据对象列表存储到另一个位置?
这是我当前的设置:
@objc(Post)
public class Post: NSManagedObject {
static func findOrCreatePost(id: String, data: [String:Any], in context: NSManagedObjectContext) -> Post {
let request: NSFetchRequest<Post> = Post.fetchRequest()
if let id = data["_id"] as? String {
request.predicate = NSPredicate(format: "id = %@", id)
}
do {
let matches = try context.fetch(request)
if matches.count > 0 {
return matches[0]
}
} catch {
let error = error
print(error.localizedDescription)
}
let post = Post(context: context)
post.id = id
status.text = data["text"] as? String
...
PersistenceService.saveContext()
return post
}
class PersistenceService {
static var context: NSManagedObjectContext {
return persistentContainer.viewContext
}
static var persistentContainer: NSPersistentContainer = {
let container = NSPersistentContainer(name: "AppName")
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
if let error = error as NSError? {
fatalError("Unresolved error \(error), \(error.userInfo)")
}
})
return container
}()
static func saveContext () {
let context = persistentContainer.viewContext
context.perform {
context.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy
if context.hasChanges {
do {
try context.save()
} catch {
let nserror = error as NSError
fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
}
}
}
}
}