核心数据:如何为时间轴获取对象?

时间:2018-11-22 05:07:15

标签: swift core-data

如何处理具有核心数据的社交时间轴的对象?

现在,从网络请求返回的每个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)")
                }
            }
        }
    }


}

0 个答案:

没有答案