【发布时间】:2015-10-06 02:02:39
【问题描述】:
我有一个 JSON 数据,我想在第一次启动时加载我的 tableview 时将其映射到 CoreData。 我在 cellForRowAtIndexPath 中找到了一种方法,但是这样我只能在显示单元格时将数据保存到 CoreData。 我想对所有单元格执行一次。
var yazarMakaleListesi: [JSON]? = []
var authorList = [AuthorList]() // My CoreData
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCellWithIdentifier("YazarCell") as! YazarTableViewCell
cell.yazar = self.yazarMakaleListesi?[indexPath.row]
cell.yazar = self.yazarMakaleListesi?[indexPath.row]
let authorName = self.yazarMakaleListesi?[indexPath.row]["author_name"].string
let authorID = self.yazarMakaleListesi?[indexPath.row]["author_id"].int
let authorImage = self.yazarMakaleListesi?[indexPath.row]["author_image"].string
let newspaperID = self.yazarMakaleListesi?[indexPath.row]["newspaper_id"].string
let newspaperName = self.yazarMakaleListesi?[indexPath.row]["newspaper"].string
let newsPaperImage = self.yazarMakaleListesi?[indexPath.row]["author_image"].string
let articleEntity = NSEntityDescription.entityForName("AuthorList", inManagedObjectContext: self.context!)
let newAuthor = AuthorList(entity: articleEntity!, insertIntoManagedObjectContext: self.context!)
newAuthor.authorName = authorName!
newAuthor.authorImage = authorImage!
newAuthor.newspaperName = newspaperName!
newAuthor.newsPaperImage = newsPaperImage!
newAuthor.authorID = authorID!
var saveError: NSError?
self.context!.save(&saveError)
if let _error = saveError {
println("\(_error.localizedDescription)")
} else {
println("Author Saved!")
}
var error: NSError?
let request = NSFetchRequest(entityName: "AuthorList")
let results = self.context!.executeFetchRequest(request, error: &error) as! [AuthorList]
return cell
}
我在这里得到 JSON 数据:
func loadYazar(){
if (gazeteid != nil){
let url = "http:myapi.com" + String(gazeteid)
Alamofire.request(.GET, url).responseJSON { (Request, response, json, error) -> Void in
if (json != nil){
var jsonObj = JSON(json!)
if let data = jsonObj["authors"].arrayValue as [JSON]?{
self.yazarMakaleListesi = data
self.tableView.reloadData()
}
}
}
}
}
编辑:我在这里得到了我的 jsonresponse,实现了@thefredelement 的建议。 但我从以下行得到“'JSON' 没有名为'valueForKey' 的成员”:
newFakeCoreDataObject.authorName = jsonResult.valueForKey("authorName") as!字符串
Alamofire.request(.GET, url).responseJSON { (Request, response, json, error) -> Void in
if (json != nil){
var jsonObj = JSON(json!)
if let jsonResults = jsonObj["authors"].arrayValue as [JSON]?{
self.yazarMakaleListesi = jsonResults
var error : NSError?
for jsonResult in jsonResults {
let newFakeCoreDataObject = FakeCoreDataObject()
newFakeCoreDataObject.authorName = jsonResult.valueForKey("authorName") as! String
self.context!.save(&error)
}
self.tableView.reloadData()
}
}
【问题讨论】:
-
如果你想做一次,在
cellForRowAtIndexPath之外做。 -
我不确定这些值是什么,我的示例只是向您展示如何为您在 for 循环中收到的每个 JSON 对象创建一个新的 nsmanaged 对象。您的列在您的单元格中,用于索引路径处的行(“author_name”、“author_id”)等。您应该使用单元格中的属性用于索引路径处的行来在 for 循环中设置对象。
-
谢谢,它现在可以工作了:)
标签: ios json swift core-data tableview