gpt4 book ai didi

ios - 使用 Realm 的 RLMArray 存储字符串数组

转载 作者:技术小花猫 更新时间:2023-10-29 10:18:54 30 4
gpt4 key购买 nike

有谁知道如何使用 Realm 来存储字符串数组?我正在尝试将以下响应正确映射到 Realm 中:

"zoneInfo": {
"tariffInfoLines": [
"In this city you pay per minute."
]
}

我们有一个包含 tariffInfoLines 数组的 zoneInfo 对象。此 tariffInfoLines 数组包含字符串。在 Realm 中有两种不同的变量类型用于存储数据。第一个是 RLMObject这允许您使用标准的 NSString、int、long 等。

第二种是RLMArray ,用于数组(因为不支持 NSArray)。您必须为数组指定一个类型,该类型必须是 RLMObject 的子类。到目前为止,我们已经通过使用 ABCRealmString 对象解决了这个问题,如下所示:

@property RLMArray<ABCRealmString> *tariffInfoLines;

ABCRealmString 包含一个 NSString 属性(它基本上是一个包装器):

@property NSString *value;

然而,这意味着当 Realm 尝试映射响应以持久化数据时,它正在寻找键“值”(属性的名称)的值。它似乎期望得到类似于以下内容的响应:

"zoneInfo": {
"tariffInfoLines": [
{
"value": "In this city you pay per minute."
},
]
}

在项目中,我们让它为以下结构工作:

"userOptions": [
{
"wantsEmailNotifications": true,
"wantsPushNotifications": false
},
]

这有一个数组,里面的对象有明确的键值对,Realm 可以映射到。 zoneInfo 结构似乎是我们拥有内部包含值集的数组的唯一地方,但它们不在对象内部或没有任何键。

如果有人可以阐明这一点,关于这是否可以使用 Realm,或者是否需要更改 API 以匹配 Realm 可以映射的结构。

最佳答案

来自 github issue 的交叉发布回应:虽然这个例子演示了如何在 Realm 模型上存储平面字符串数组,但您可以扩展此模式以存储从整数数组到原生 Swift 枚举的任何内容。基本上任何可以映射到 Realm 中可表示类型的东西。

class RealmString: Object {
dynamic var stringValue = ""
}

class Person: Object {
var nicknames: [String] {
get {
return _backingNickNames.map { $0.stringValue }
}
set {
_backingNickNames.removeAll()
_backingNickNames.appendContentsOf(newValue.map({ RealmString(value: [$0]) }))
}
}
let _backingNickNames = List<RealmString>()

override static func ignoredProperties() -> [String] {
return ["nicknames"]
}
}

// Usage...

let realm = try! Realm()
try! realm.write {
let person = Person()
person.nicknames = ["John", "Johnny"]
realm.add(person)
}

for person in realm.objects(Person) {
print("Person's nicknames: \(person.nicknames)")
}

// Prints:
// Person's nicknames: ["John", "Johnny"]

关于ios - 使用 Realm 的 RLMArray 存储字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31724595/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com