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

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-15 09:26:03  来源:igfitidea点击:

How to write JSON to Realm in Swift

iosjsonswiftxcoderealm

提问by Zhanserik

I can't find information how to write my JSONdata to my Realm DBin Swift.

我找不到如何将我的JSON数据写入我的Realm DBin 的信息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 JSONfrom 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)