ios - 在哪里放置数据数组

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

我正在尝试最好地遵循 MVC。放置我的数据数组的“正确”位置在哪里?我说的是下面的 people 数组。它应该放在下面的 View Controller 中,还是应该是在 View Controller 中实例化的数据服务/数据存储类的一部分(通过依赖注入(inject))?我在两个地方都看到过它。

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)
    }
}

最佳答案

按照MVC的方式存放在viewController里面完全没问题。虽然,您可以将它移动到某个单独的 source 对象或 dataProvider,但大多数时候它没问题,而且从您的代码看来对我来说没问题。

我有几点意见要给你:

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

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

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

4) 最好用fetchPersons这样的方法将获取逻辑移到一些服务中

关于ios - 在哪里放置数据数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46514158/

相关文章:

ios - 快速显示和隐藏导航栏

ios - 如何以一对多关系更新核心数据模型

ios - 动画入门

ios - 如何从 Firestore 返回数组中的数据?

swift - 如何在 Swift 3 中将两个字符串(日期和时间)组合成一个新日期

ios - NSManagedObjectContext:带有通知中心的 performBlockAndWait 与 performBlock

ios - GeocodeAddressAsync在某些地址而非全部地址上引发NSErrorException

Swift MapKit - 向注释添加(额外)属性?

objective-c - 根据匹配来自 coredata 的字符串选择 UIPickerview

ios - 如何将 setReturnsDistinctResults 与 Magical Record 一起使用?