2016-04-14 5 views
0

私はユーザーが色を付けることができるアプリケーションを構築しています。たとえば、ユーザーは#00FFFFを「緑色」と名前を付けることができます。これらの名前と対応する色をCore Dataに保存する必要があります。コアデータにキー値のペアを保存する方法は?

私はペアをキーと値のペアとして保存することをお勧めします - キーとしての色と値としての名前。しかし、新しいエンティティを作成して2つの属性を追加したとき、Core Dataに「プライマリキー」なのかどうかを伝える方法はありません。 Core Dataに私に対応する名前を教えることはできません。

私はいくつかの回避策について考えていますが、十分に「甘い」わけではありません。

  1. NSUserDefaultsに辞書としてキーと値のペアを保存します。しかし、そこには[String: AnyObject]しか保存できません。私が必要なのは[Int: String]です。私はintを文字列に変換できることを知っていますが、コードを読むことができず、読みにくくなります。また、キーの値をAnyObjectからStringにキャストする必要があります。これは私が気に入らない別のものです。ジェネリック医薬品は発明されていないようです。

  2. コアデータエンティティに色と名前を保存できます。色の名前が何であるかを知りたいときは、すべてを線形検索します。私は一度にそれを行うことがしたい

    for item in allTheColorNames { 
        if item.color == theStuffIWantToFind { 
         // do something 
         break 
        } 
    } 
    

    :このように

。上記のコードはあまりエレガントではない、あなたは私が何を意味するのか知っていますか?

このようなことができるように、コアデータに色名のペアを格納する方法はありますか?

var theNameOfGreen = colorNameDictionary[0x00ff00] 

答えて

1

Dmytroが推奨する内容は、Core Dataで行う正しい方法である必要があります。 私はそれが非常に簡単なもののために多くのオーバーヘッドを作り出すと主張します。なぜそれをプロパティリストに保存しないのですか? Xcodeで作成し、辞書を追加して、キーに名前を付け、対応する色を値にします。 「主キー」のような概念がありません

let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true) as NSArray 
let documentsDirectory = paths.objectAtIndex(0) as NSString 
let path = documentsDirectory.stringByAppendingPathComponent("MyFile.plist") 

data.writeToFile(path, atomically: true) 
+0

しかしplistをプログラムで編集できますか? – Sweeper

+0

はい、私の編集を参照してください。 –

+0

うーん...この状況でplistsを使うのはかなり良い考えのようだ。しかし、私はあなたのコードを理解できません。とにかくアイデアのおかげで!私はplistsについてもう少し研究をします! – Sweeper

-1

「リレーションシップ」は1対1のように使用する必要があります。

新しいエンティティ「NamesForColors」を作成し、1つの属性「名前」(たとえば)と1つの関係「色」(たとえば)を追加します。

次に、2つ目の「色」エンティティを作成し、1つの属性「色」(たとえば)と1つの関係「名前」(たとえば)を追加します。 それをバインドします。

私はあなたを正しく理解しています。

+0

コアデータ:plistファイルに辞書を保存するには

let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true) as NSArray let documentsDirectory = paths.objectAtIndex(0)as NSString let path = documentsDirectory.stringByAppendingPathComponent("MyFile.plist") let fileManager = NSFileManager.defaultManager() // Check if file exists if(!fileManager.fileExistsAtPath(path)) { // If it doesn't, copy it from the default file in the Resources folder let bundle = NSBundle.mainBundle().pathForResource("DefaultFile", ofType: "plist") fileManager.copyItemAtPath(bundle, toPath: path, error:nil) } var data = NSMutableArray(contentsOfFile: path) 

:plistファイルから辞書をロードするために

。一意のIDとしてNSManagedObjectIDのみ。 –

関連する問題