【问题标题】:Where to put array of data在哪里放置数据数组
【发布时间】:2025-07-31 01:30:01
【问题描述】:

我正在努力最好地遵循 MVC。放置我的数据数组的“正确”位置在哪里?我说的是下面的人员数组。它应该放在下面的视图控制器中,还是应该是在视图控制器中实例化的数据服务/数据存储类的一部分(通过依赖注入)?我在两个地方都看到过。

class ViewController: UIViewController {
    var people: [Person] = []

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

        guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { return }

        let context = appDelegate.persistentContainer.viewContext

        let fetchRequest: NSFetchRequest<Person> =  Person.fetchRequest()

        people = try? context.fetch(fetchRequest)
    }
}

【问题讨论】:

    标签: ios swift core-data model-view-controller


    【解决方案1】:

    根据MVC将它存储在viewController中是完全可以的。虽然,您可以将其移至某个单独的 source 对象或 dataProvider,但大多数情况下都可以,从您的代码来看,我觉得还可以。

    我有几个 cmets 给你:

    1) 最好将 CoreData 逻辑从 AppDelegate 中移出 - 无论是分离单例还是服务对象(最好,因为单例很难测试)

    2) context.fetch 最好包裹在 do {} catch {} 大多数时候阻塞

    3) 您不必等到 viewWillAppear 触发来获取数据,至少从提供的代码中获取数据

    4) 最好使用 fetchPersons

    之类的方法在某些服务中移动获取逻辑

    【讨论】:

    • 谢谢你,你能澄清评论3吗?您的意思是在 viewDidLoad 中获取数据?
    • 没错,viewDidLoad 接缝更合适的地方来做这件事,除非你想在每次视图出现时重新获取它