2017-02-21 10 views
3

私はRealmに慣れていて、この問題を抱えています。ディクショナリを使用して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プロパティタイプではありません。すべてのプロパティは、NSStringNSDateNSDataNSNumberRLMArrayRLMLinkingObjects、またはRLMObjectのサブクラスでなければなりません。
詳細については、https://realm.io/docs/objc/latest/api/Classes/RLMObject.htmlを参照してください。
は私が

var nickNames = NSArray() 

var nickNames = NSMutableArray() 

でもない、私はニックネームのモデルクラスを作成し、次のようにプロパティを作成する必要があるか、これを行う方法がありますworking.Doをも試してみましたか?

var nickNames = List<Nickname>() 
+0

レルムはプリミティブ型のリストを直接サポートするようになりました。 [この回答](https://stackoverflow.com/a/48339013/1315347)を参照してください。 – bmunk

答えて

0

レルムは、プリミティブ型(文字列のようなList S)のListの性質をサポートしていない現在NSArray Sであり、およびモデルプロパティをサポートしていません。今のところ、ニックネーム文字列をラップするNicknameモデルを作成し、上のサンプルコードのようにList<Nickname>を格納する必要があります。

This ticketはGitHubリポジトリでプリミティブのリストをサポートしていますが、2014年のコメントは特に重要です。その機能がいつ利用可能になるのかを知りたい場合は、そのチケットに従うことができます。

は(また、あなたがlet、ないvarとしてあなたのリストのプロパティを宣言する必要があることに注意してください。)

+0

このようなニックネームのモデルを作成しました '' ' class NickName:Object { 動的var値:文字列! } '' と無効な値 'ジョン' 型 'ニックネーム' のオブジェクトを初期化する ' をクラッシュさ 'せニックネーム=一覧() ' としてニックネームプロパティを作りました。 key 'value'がありません '' ' –

+0

' John'はあなたのコメントに投稿したコードスニペットのいずれにもありません。使用している実際のコードで質問を更新できますか? – AustinZ

+0

ジョンはニックネームの値です。私はヴァルスの名前を変更しました。それ以外は何もありません。あなたはそれを '1'にすることができます。まだ質問を更新する –

0

リストを使用してかなりそれを行うための唯一の方法です。 Nicknameオブジェクト(Listで使用するために作成したレルムオブジェクト)を初期化するときは、値が実際には1つの文字列であっても、値paramの配列を指定する必要があります。例えば:それは「『ニックネーム』タイプのオブジェクトを初期化するために無効な値が 『ジョン』」というエラーを投げていた理由である

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

0

UPDATE:直接RLMArraysまたはリスト内:

あなたは今(ブール値、整数および浮動小数点数の種類、文字列、日付、およびデータより具体的に)プリミティブ型またはそのNULL可能対応を格納することができます。このようなプリミティブ値のリストを定義したい場合、面倒な単一フィールドラッパーオブジェクトを定義する必要がなくなりました。代わりに、プリミティブ値自体を保存することができます。

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 

レルムでサポートされている他のすべての言語もプリミティブ型のリストをサポートしています。下記の例はスウィフトのための実証として、プリミティブ値の

リストは、オブジェクトを含むリストとほとんど同じように動作します。

関連する問題