如何在没有NSFetchedResultsControllerDelegate的情况下获取结果?

时间:2020-08-18 08:35:28

标签: ios swift core-data nsfetchedresultscontroller

我试图从不是NSFetchedResultsControllerDelegate的类中获取结果,这就是为什么我得到0个结果吗?

public static func getTopics() -> Array<ipTopic> {
    if (topics == nil) {
        var fetchedResultsController: NSFetchedResultsController<ipTopic>!
        let pc = CoreDataHub.getPersistentContainer()
        let blogIdeasFetchRequest = NSFetchRequest<ipTopic>(entityName: "ipTopic")
        let primarySortDescriptor = NSSortDescriptor(key: "ipTopicsClip", ascending: true)
        blogIdeasFetchRequest.sortDescriptors = [primarySortDescriptor]
        
        fetchedResultsController = NSFetchedResultsController<ipTopic>(
            fetchRequest: blogIdeasFetchRequest,
            managedObjectContext: pc.viewContext,
            sectionNameKeyPath: nil,
            cacheName: nil)
        do {
            try fetchedResultsController.performFetch()
        } catch {
            print("An error occurred")
            
        }
        print(fetchedResultsController.fetchedObjects?.count)
        for topic in fetchedResultsController.fetchedObjects! {
            topics.append(topic)
        }
    }
    return topics
}

1 个答案:

答案 0 :(得分:0)

这将创建新的专用队列,并需要一段代码来运行。这可以与您的容器一起使用,也可以使用容器作为参数

func read(_ block: @escaping (NSManagedObjectContext) -> Void) {
    persistentContainer.performBackgroundTask {
        block($0)
    }
}

这就是您将如何使用它

func fetchEvents() {
    read { context in
        let request: NSFetchRequest<Event> = Event.fetchRequest()
        let events = try? context.fetch(request)
        print(events)
    }
}