如何在Swift中将字典数组存储到Realm数据库

时间:2018-10-10 08:29:35

标签: ios iphone swift database realm

我正在通过swift应用程序中的api调用从服务器获取JSON数据。 因此,我想将其存储到Realm数据库中,再次需要获取以显示在表视图中。

我对Realm数据库一无所知,之后,检查了几个论坛,我对创建Object类有了基本的了解。

因此,我已经安装了Realm pod文件并将该库导入到我的类中。

我的JSON数据是

[{
"type": "story",
"story": 

{
"author-name": "",
"headline": "Quotes ",
"summary": "Best quotes of Muhammad Ali",
"hero-image": "https://image”
}
},
{
"type": “Trending”,
"story": 
    {
    "author-name": "",
    "headline": "Quotes ",
    "summary": "Best quotes of Muhammad Ali",
    "hero-image": "https://image”
    }
    },
    {
    "type": “Technology”,
    "story": 

    {
    "author-name": "",
    "headline": "Quotes ",
    "summary": "Best quotes of Muhammad Ali",
    "hero-image": "https://image”
    }
    },
    {
    "type": “Top”,
    "story": 

    {
    "author-name": "",
    "headline": "Quotes ",
    "summary": "Best quotes of Muhammad Ali",
    "hero-image": "https://image”
    }
    }
    ]

而且我每个 type 关键字都有与api数据不同的模型类保存数据,以显示在 Tableview

喜欢

let storyObj = StoryModule()
let trending = StoryModule()
let technology = StoryModule()
let stotopryObj1 = StoryModule()

并且我正在为每种类型

保存每个键值
if abc.type == "story" {
    let storyObj = abc.story
    storyObj.authorname = storyObj?.authorname
    storyObj.heroimage = storyObj?.heroimage
    storyObj.headline = storyObj?.headline
    storyObj.summary = storyObj?.summary
    self.treningStoriesList.append(storyObj)
}

其余的趋势,热门和技术对象也是如此。

并且Realm模块是

import RealmSwift

class DemoInfo: Object {
    @objc dynamic var category = ""
    let items = List<DemoList>()
}

class DemoList : Object {
    @objc dynamic var authorName = ""
    @objc dynamic var imageUrl = ""
    @objc dynamic var summary = ""
    @objc dynamic var headLine = ""
}

MainViewController类中,

let realmDB = try! Realm()

但是,在这里,我很震惊,如何保存这些storyObj,technology,top, etc模块数据并提取。

有人可以建议我吗?

1 个答案:

答案 0 :(得分:0)

如果要在数据库中添加领域对象,则必须为每个领域对象类定义一个主键。因此,在您可以像这样创建领域对象之后,您需要更改JSON文件;

DemoObject.swift

import RealmSwift

class DemoObject: Object {

    @objc dynamic var id: String = ""
    @objc dynamic var type: String = ""
    @objc dynamic var subObject: SubObject?

    override static func primaryKey() -> String? {
        return "id"
    }
}

SubObject.swift

import RealmSwift

class SubObject: Object {

    @objc dynamic var id: String = ""
    @objc dynamic var authorName: String = ""
    @objc dynamic var imageUrl: String = ""
    @objc dynamic var summary: String = ""
    @objc dynamic var headLine: String = ""

    override static func primaryKey() -> String? {
        return "id"
    }
}

然后,您可以使用这些代码添加数据库。

let realm = try! Realm()

let demo = DemoObject()
demo.id = "1"

let sub = SubObject()
sub.id = "1"
sub.authorName = "Author Name"
sub.headLine = "Head Line"
sub.summary = "image Url"

demo.subObject = sub

try! realm.write {
    realm.add(demo, update: true)
}