xcode 如何在 Swift 中将 JSON 写入 Realm
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/39951647/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to write JSON to Realm in Swift
提问by Zhanserik
I can't find information how to write my JSON
data to my Realm DB
in Swift
.
我找不到如何将我的JSON
数据写入我的Realm DB
in 的信息Swift
。
I have class:
我有课:
class News: Object {
dynamic var newsID: String = ""
dynamic var newsTitle: String = ""
dynamic var newsFullText: String = ""
dynamic var newsAutor: String = ""
dynamic var newsCommentCount: String = ""
dynamic var newsSeenCount: String = ""
dynamic var newsDate: String = ""
dynamic var newsCategory: String = ""
}
In here I take JSON
from server:
在这里,我JSON
从服务器获取:
func parseJSONData(data: NSData) -> [News] {
do {
let temp: NSString = NSString(data: data, encoding: NSUTF8StringEncoding)!
let myNSData = temp.dataUsingEncoding(NSUTF8StringEncoding)!
let jsonResult = try NSJSONSerialization.JSONObjectWithData(myNSData, options: NSJSONReadingOptions.MutableContainers) as! NSDictionary
let jsonNews = jsonResult["posts"] as! [AnyObject]
for jsonnewes in jsonNews {
let newsJson = News()
newsJson.newsTitle = jsonnewes["post_title"] as! String
newsJson.newsAutor = jsonnewes["author_name"] as! String
newsJson.newsFullText = jsonnewes["full_text"] as! String
newsJson.newsID = jsonnewes["id"] as! String
newsJson.newsCategory = jsonnewes["menu_category_name"] as! String
newsJson.newsDate = jsonnewes["create_date"] as! String
newsJson.newsSeenCount = jsonnewes["review"] as! String
newsJson.newsCommentCount = jsonnewes["comment_count"] as! String
newsItems.append(newsJson)
}
} catch {
print(error)
}
return newsItems
}
And how to write my data to Realm DB
?
以及如何将我的数据写入Realm DB
?
回答by Farhad Faramarzi
this :
这个 :
func insertOrUpdate(news: News) {
try! realm.write({
realm.add(news)
})
}
but it is better you create a model without inherit from object :
但最好创建一个没有从对象继承的模型:
class News {
var newsID: String = ""
var newsTitle: String = ""
var newsFullText: String = ""
var newsAutor: String = ""
var newsCommentCount: String = ""
var newsSeenCount: String = ""
var newsDate: String = ""
var newsCategory: String = ""
}
class NewsRealm: Object {
dynamic var newsID: String = ""
dynamic var newsTitle: String = ""
dynamic var newsFullText: String = ""
dynamic var newsAutor: String = ""
dynamic var newsCommentCount: String = ""
dynamic var newsSeenCount: String = ""
dynamic var newsDate: String = ""
dynamic var newsCategory: String = ""
}
then after parse json you call insertOrUpdate and map data with NewsRealm :
然后在解析 json 之后调用 insertOrUpdate 并使用 NewsRealm 映射数据:
func insertOrUpdate(news: News) {
let realm = try! Realm()
try! realm.write({
let newsRealm = NewsRealm()
newsRealm.newsTitle = news.newsTitle
newsRealm.newsAutor = news.newsAutor
newsRealm.newsFullText = news.newsFullText
.
.
.
realm.add(newsRealm)
})
}
回答by Farhad Faramarzi
for update filed . you should define method in newsRealm for primary key:
更新归档。您应该在 newsRealm 中为主键定义方法:
class NewsRealm: Object {
dynamic var newsID: String = ""
dynamic var newsTitle: String = ""
dynamic var newsFullText: String = ""
dynamic var newsAutor: String = ""
dynamic var newsCommentCount: String = ""
dynamic var newsSeenCount: String = ""
dynamic var newsDate: String = ""
dynamic var newsCategory: String = ""
override static func primaryKey() -> String? {
return "newsID"
}
}
and then for update :
然后更新:
func insertOrUpdate(news: News) {
let realm = try! Realm()
try! realm.write({
let newsRealm = NewsRealm()
newsRealm.newsTitle = news.newsTitle
newsRealm.newsAutor = news.newsAutor
newsRealm.newsFullText = news.newsFullText
.
.
.
realm.add(newsRealm, update: true) })
}
if a new filed so your object add into database but there are in database your object be update .
如果一个新的文件所以你的对象添加到数据库中,但数据库中有你的对象被更新。
sorry for my english ;)
对不起我的英语不好 ;)
回答by Oleksandr Isaiev
This code works for me, you shouldn't create class News and NewsRealm, just one:
这段代码对我有用,你不应该创建类 News 和 NewsRealm,只有一个:
import SwiftyJSON
class News: Object {
@objc dynamic var newsID: String?
@objc dynamic var newsTitle: String?
convenience init(value: JSON) {
self.init()
for (key, value) in valueJSON {
switch key {
case "newsID":
self.newsID = value.stringValue
case "newsTitle":
self.newsTitle: = value.stringValue
}
}
}
}
Somwhere in code
代码中的某个地方
let model = News(value: jsonObject)