【发布时间】:2014-11-17 20:52:13
【问题描述】:
我正在尝试使用 Swift 制作 iOS 8 应用程序,我需要从 JSON 下载数据并保存它,但我不了解 Core Data 机制。 (我来自 Android 的 ORM Lite 和 Windows Phone 的 sqlite-net)。
我正在尝试执行两个任务,“GetAllNewsTask”从数据库返回所有新闻,“UpdateAllNewsTask”下载 JSON 并解析它,保存到数据库并返回所有新闻。
getEntitiesFromJson函数将解析后的JSON字符串转化为实体对象
class func getEntitiesFromJson(json: JSONValue) -> [NewsEntity]?{
var rList : [NewsEntity] = []
var array = json.array
var countItr = array?.count ?? 0
if(array == nil){
return nil
}
if(countItr > 0){
for index in 0...countItr-1{
var news = NewsEntity()
var jsonVal = array?[index]
news.id = jsonVal?["id"].integer ?? 0
........
rList.append(news)
}
}
return rList
}
GetAllNewsTask(newsDao.findAll() 当前返回一个硬编码的空数组,我没有找到如何同步选择所有 NewsEntity)
class GetAllNewsTask:NSOperation {
var result : Array<News>?
override func main() -> (){
result = executeSync()
}
func executeSync() -> Array<News>? {
let newsDao = NewsDAO()
let entities = newsDao.findAll()
return NewsModel.getVOsFromEntities(entities)
}
UpdateAllNewsTask
class UpdateAllNewsTask:NSOperation {
var result : Array<News>?
override func main() -> (){
result = executeSync()
}
func executeSync() -> Array<News>? {
let response = JsonServices.getAllNews()
var managedObjectContext = (UIApplication.sharedApplication().delegate as AppDelegate).managedObjectContext!
var entityDescription = NSEntityDescription.entityForName("NewsEntity", inManagedObjectContext: managedObjectContext)
var entities = NewsModel.getEntitiesFromJson(response)
//TODO insert new, update existing and remove old
return GetAllNewsTask().executeSync()
}
我正在尝试添加或更新所有 NewsEntity 并删除旧的,在 Java 中我使用了List.removeAll(Collection<T>),但我找不到如何在 Swift 中执行此操作。
当我在 NewsEntity 类中覆盖 equals 和 hashcode 时出现异常。
在继续之前,这样做是否正确? 如果是的话,有什么好的教程可以演示如何做到这一点? 如果没有正确的方法是什么?
【问题讨论】:
-
我的回答没有帮助吗?