が、ここにいくつかの背景です:NSManagedObjectIDを永続的に格納する方法は? XYの問題点を回避するために
マイアプリは、ユーザーがちょっとのXcodeのフォントや色チューのような設定の多くを作成して保存することができます:
これは、ユーザーが設定できることはたくさんあります。すべてのものを再び設定するのではなく、保存した設定をタップする方が簡単です。
コアデータを使用して、ユーザーが保存した設定を保存しました。ユーザーが作成した各設定は、NSManagedObject
サブクラスのインスタンスです。そして、今度は、選択した設定を永続的に保存する必要があります。そのため、ユーザーは、アプリが再び開くときに以前と同じ設定が選択されます。
私の最初の考えはNSManagedObject
サブクラスのインスタンスをNSUserDefaults
に保存することでした。しかし、ドキュメントによると、私はNSData
に変換しない限り、私はそれを格納することはできません。
デフォルトのオブジェクトは、プロパティリストである必要があり、それは、(のインスタンスの組み合わせまたはコレクション用)のインスタンスであります:NSData、NSString、NSNumber、NSDate、NSArray、またはNSDictionary。
次に、NSManagedObject
サブクラスインスタンスのobjectID
を保存しようとしました。 URIRepresentation()
メソッドがあり、NSURL
を返すことがわかります。だから私はこれがうまくいくと思った:
NSData(contentsOfURL: selectedOption!.objectID.URIRepresentation())
しかし、初期化子は何とか失敗した。
今私はそれをNSData
に変換することができますが、NSData
をNSManagedObjectID
に戻すことができないので、これはばかげたアイデアです。
this questionによると、OPは、オブジェクトIDを保存することができるように思わ:
時にアプリを再起動すると、選択したテーマは無傷のままになるように、私はNSUserDefaultsで選択したテーマのオブジェクトIDを格納します。
どうすればいいですか?
URIRepresentationの文字列値をNSUserDefaultsに保存するだけで済みます。後でその文字列をロードし、 'managedObjectIDForURIRepresentation'を使用してNSObjectIdを取得し、次に' objectWithID'を使用してNSManagedObjectを取得することができます – Paulw11
@ Paulw11どのように文字列を対応するNSManagedObjectに変換できますか? – Sweeper
私が言ったように、 'managedObjectIDForURIRrepresentation'へのURLを提供することによってオブジェクトを提供することは' objectWithID'に返されます。 – Paulw11