gpt4 book ai didi

cocoa - 将 CoreData 实体保存在 NSUserDefaults 中

转载 作者:行者123 更新时间:2023-12-03 16:01:58 24 4
gpt4 key购买 nike

想象一个 CoreData 实体(例如名为 searchEngine )。
NSManagedObjectContext管理该实体的一些“实例”。
最终用户将能够选择他的 "standard searchEngine"NSPopupButton .
selected object NSPopupButton 的应该绑定(bind)到 NSUserDefaults。
问题:

1) @try{save}

a) If you try to save the selected "instance" directly to NSUserDefaults there comes something like this:

-[NSUserDefaults setObject:forKey:]: Attempt to insert non-property value ' (entity: searchEngine; id: 0x156f60  ; data: {    url = "http://google.de/";    someAttribute = 1;    name = "google";})' of class 'searchEngine'.

b) If you try to convert the "instance" to NSData comes this:

-[searchEngine encodeWithCoder:]: unrecognized selector sent to instance 0x1a25b0

So any idea how to get this entities in a plist-compatible data?

2) @尝试{注册默认}

Usually the registerDefaults: method is implemented in + (void)initialize. The problem here is that this method is called before CoreData loads the saved entities from his database. So I can't set a default to a no-existing object, right?

我知道,问题很长...但是:尝试{[我提供:详细信息]} ;D

最佳答案

如果需要存储对特定托管对象的引用,请使用其托管对象 ID 的 URI 表示形式:

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

然后您可以将该 URL 保存为用户默认值。

要检索托管对象,您可以使用:

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

唯一需要注意的是,您必须确保原始托管对象 ID 是永久的 - 如果您已经保存了该对象,这不是问题,或者您可以使用 obtainPermanentIDsForObjects:error: .

关于cocoa - 将 CoreData 实体保存在 NSUserDefaults 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/499897/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com