我的应用程序使用Alamofire通过异步请求向服务器提取JSON数据。我需要做到以下几点:
1.不要多取请求和接收JSON数据
2.发送JSON数据,我DataImporter
类导入到核心数据核心数据中的并发数据获取请求
的DataImporter类必须做到以下几点:
1。转换JSON成NSManagedObject
阵列,用于存储到核心数据
2.从核心数据获取当前管理对象
3.比较转换后的对象到被取出的和更新的那些/删除/添加新对象
4.将状态保存到核心数据
这里是我想我会从我的ViewController发送请求:
override func viewDidLoad() {
super.viewDidLoad()
Alamofire.request(.GET, url1)
.responseJSON { response in
switch response.result {
case .Success(let value):
self.dataImporter.importArticles(value)
case .Failure(let error):
print(error)
}
}
Alamofire.request(.GET, url2)
.responseJSON { response in
switch response.result {
case .Success(let value):
self.dataImporter.importArticles(value)
case .Failure(let error):
print(error)
}
}
}
这里是我DataImporter类看起来像:
class DataImporter {
private var privateMOC:NSManagedObjectContext!
init() {
privateMOC = setupManagedObjectContextWithConcurrencyType(.PrivateQueueConcurrencyType)
}
func importArticles(articlesInJson:JSON) {
self.privateMOC.performBlock {() -> Void in
let articles = self.convertJsonToArticle(articlesInJson)
let fetchedArticles = //return articles using privateMOC
//compare articles and delete/update/add new articles
self.privateMOC.save()
}
}
现在我的问题是:
1。这是从Web服务导入数据的有效方式吗?
2.我应该为Alamofire请求使用不同的队列吗?
3.我的并发MOC的使用是否正确?我是否需要将提取请求和导入分为两个单独的方法?
这是什么问题?没有什么不妥。试试吧,看看:D – jarryd
我读过很多文章,我把所有的东西都混在了我的脑海里。我最后一次使用核心数据队列的尝试最终导致意外错误和约束违规。现在我只需要有人来确认这种方式是正确的。 – n0ne
所以CoreData和并发的主要原因是需要为该线程/队列创建一个上下文。这涉及到不能跨线程使用核心数据对象的问题,而是跨线程传递它们的managedObjectId,以便可以获取和使用它们。您还需要注意通知UI或其他对象有关新数据。有一个didSaveNotification可以访问所有更改。这就是为什么NSFetchedResultsController很好,它可以在其观看的对象是fetchRequest时发生更改时自动更新UI。 – jarryd