【问题标题】:Can you put networking methods in an NSManagedObject subclass?您可以将网络方法放在 NSManagedObject 子类中吗?
【发布时间】:2013-05-25 23:04:37
【问题描述】:
我有一个NSManagedObject 子类来代表 Flickr 上的一个人。我必须通过 URL 请求获取所有要存储在 Internet 核心数据中的属性。我想把从网络上抓取数据的函数放在 Person 类中。但是,请求将异步完成,并且属性将在完成块中设置在对象上。这会因为 Core Data 不是线程安全而导致错误吗?最好有一个单独的类来加载,还是 NSManagedObject 子类可以工作?
【问题讨论】:
标签:
ios
multithreading
networking
core-data
thread-safety
【解决方案1】:
我会把它放在一个单独的类中。对于不同的线程问题(使用NSManagedObjectContext 的performBlock: 方法解决起来相对简单)而言,与其说是为了您的关注点分离,不如说是为了您的关注点分离。数据模型应该只存储数据。它不应该担心下载它。创建一个下载数据的类,然后将原始数据传递给NSManagedObject 子类(想到一个名为+objectFromDownloadedData:(NSData *) 的方法),以创建一个您的应用可以使用的实际数据对象。
【解决方案2】:
您可以将网络代码放在NSManagedObject 子类中。
然而,这样做是壮观糟糕的设计。将网络代码放在模型类中只是糟糕的应用程序架构。它可以工作,但它会是 iOS 上见过的最丑陋、最糟糕的代码。