2017-02-21 37 views
3

Я новичок в королевстве и имею эту проблему.Как хранить массив строк в экземпляре Realm с помощью словаря?

Я имею Dictionary как это

{ 
    firstName : "Mohshin" 
    lastName : "Shah" 
    nickNames : ["John","2","3","4"]    
} 

и class как этот

class User: Object { 
    var firstName: String? 
    var lastName: String? 
    var nickNames: [String]? 
} 

В то время как я пытаюсь вставить значения она бросает исключение, как показано ниже

собственности " nickNames 'объявляется как NSArray, который не является поддерживаемым типом свойства RLMObject. Все свойства должны быть примитивами, NSString, NSDate, NSData, NSNumber, RLMArray, RLMLinkingObjects или подклассы RLMObject.
Для получения дополнительной информации см. https://realm.io/docs/objc/latest/api/Classes/RLMObject.html.
Я также попытался

var nickNames = NSArray() 

var nickNames = NSMutableArray() 

Но не working.Do мне нужно сделать класс модели Псевдоним и создать свойство как следовать или есть способ сделать это?

var nickNames = List<Nickname>() 
+0

Realm теперь поддерживает списки примитивных типов напрямую. См. [Этот ответ] (https://stackoverflow.com/a/48339013/1315347). – bmunk

ответ

0

Realm не поддерживает свойства модели, которые NSArray s, и в настоящее время не поддерживает свойства, которые List s примитивных типов (таких как List х строк). На данный момент вы должны создать модель Nickname, которая обертывает никовую строку, а затем сохранит List<Nickname>, как в вашем примере кода выше.

This ticket на нашей дорожке репозитория GitHub поддерживает списки примитивов, хотя ни один из комментариев с 2014 года не имеет особого значения. Вы можете следить за этим билетом, если хотите получить информацию о том, когда эта функция станет доступной.

(Также обратите внимание, что вы должны объявить список вашу собственность в качестве let, не var.)

+0

Создана модель для такого прозвища '' ' class NickName: Object { dynamic var value: String! } '' ' и сделал свойство прозвищ, как ' пусть прозвище = Список () ' Это происходит сбой ' '' недопустимого значения 'Джон', чтобы инициализировать объект типа 'нику': missing key 'value' ' '' ' –

+0

' John' не содержится в каких-либо фрагментах кода, опубликованных в вашем комментарии. Можете ли вы обновить свой вопрос с помощью фактического кода, который вы используете? – AustinZ

+0

John - это прозвище. Я только что переименовал vars, ничего больше. Вы можете иметь его '1'. Все еще обновляя вопрос –

0

Использование списка в значительной степени единственный способ сделать это. Когда вы инициализируете объект Nickname (объект области, который вы создали для использования в List), вы должны предоставить массив для параметра param, даже если это значение фактически представляет собой только одну строку. Например:

let aNickName = Nickname(value:["John"]) 

Вот почему он бросает ошибку говоря «недопустимое значение„Джон“, чтобы инициализировать объект типа" Псевдоним».

0

UPDATE:

Теперь вы можете хранить примитивные типы или их аналоги NULLABLE (более конкретно: булевы, целочисленные и типы чисел с плавающей точкой, строки, даты и данные) непосредственно в пределах RLMArrays или списков. Если вы хотите определить список таких примитивных значений, вам больше не нужно определять громоздкие однополевые объекты-обертки. Вместо этого вы можете просто сохранить примитивные значения сами.

Списки примитивных значений работают так же, как списки, содержащие объекты, как пример демонстрирует для Swift:

class Student : Object { 
    @objc dynamic var name: String = "" 
    let testScores = List<Int>() 
} 

// Retrieve a student. 
let realm = try! Realm() 
let bob = realm.objects(Student.self).filter("name = 'Bob'").first! 

// Give him a few test scores, and then print his average score. 
try! realm.write { 
    bob.testScores.removeAll() 
    bob.testScores.append(94) 
    bob.testScores.append(89) 
    bob.testScores.append(96) 
} 
print("\(bob.testScores.average()!)") // 93.0 

Все другие языки, поддерживаемые Realm также поддерживает списки примитивных типов.