19

CoreData エンティティ (名前付きsearchEngineなど) を想像してください。
NSManagedObjectContextこのエンティティのいくつかの「インスタンス」を管理します。
エンドユーザーは"standard searchEngine"NSPopupButton. NSPopupButton
のは、NSUserDefaults にバインドする必要があります。 問題: selected object

1)@try{保存}

a)選択した「インスタンス」を直接 NSUserDefaults に保存しようとすると、次のようになります。

-[NSUserDefaults setObject:forKey:]: 非プロパティ値を挿入しようとしています ' (エンティティ: searchEngine; id: 0x156f60 ; データ: {
    url = " http://google.de/ ";
    someAttribute = 1;
    名前 = "グーグル";
})」クラス「searchEngine」の。

b)「インスタンス」を NSData に変換しようとすると、次のようになります。

-[searchEngine encodeWithCoder:]: 認識されないセレクターがインスタンス 0x1a25b0 に送信されました

plist互換データでこのエンティティを取得する方法はありますか?

2)@try{registerDefaults}

通常、registerDefaults:メソッドは で実装され+ (void)initializeます。ここでの問題は、CoreData がデータベースから保存されたエンティティをロードする前に、このメソッドが呼び出されることです。存在しないオブジェクトにデフォルトを設定することはできませんよね?

長い質問ですが、{[me provide:details]} ;D を試してください

4

4 に答える 4

35

特定の管理対象オブジェクトへの参照を保存する必要がある場合は、その管理対象オブジェクト ID の URI 表現を使用します。

NSURL *moIDURL = [[myManagedObject objectID] URIRepresentation];

その後、URL をユーザーのデフォルトに保存できます。

管理対象オブジェクトを取得するには、次を使用します。

NSManagedObjectID *moID = [myPersistentStoreCoordinator managedObjectIDForURIRepresentation:moIDURL];
NSManagedObject *myManagedObject = [myContext objectWithID:moID];

唯一の注意点は、元の管理対象オブジェクト ID が永続的であることを確認する必要があることです。オブジェクトを既に保存している場合、これは問題ではありませんobtainPermanentIDsForObjects:error:

于 2009-07-07T16:07:24.967 に答える
0

私のモデルは、次のアプリの起動で最後に開いたレコードを起動するために、レコードの UUID を UserDefaults に保存します。

public class Patient: NSManagedObject {    
    override public func awakeFromInsert() {
        super.awakeFromInsert()
        uuid = UUID()
}

extension Patient {
    @NSManaged public var uuid: UUID
    @NSManaged ...
}

各レコードを一意の ID (UUID) で識別することをお勧めします。を呼び出すだけで、UUID を文字列として保存できますuuid.uuidString

于 2020-06-30T11:26:32.053 に答える