gpt4 book ai didi

ios - NSPredicate 状态恢复

转载 作者:行者123 更新时间:2023-11-29 12:44:51 24 4
gpt4 key购买 nike

当我创建谓词时,我使用了一些实体

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"location IN %@", anno.locationsArray];
//locationArray contains SMLocation Entity

知道文档说明:

If you need a persistent representation of a predicate, create an archive (NSPredicate adopts the NSCoding protocol).

我希望那里不会有问题,但是在里面时:

-(UIViewController*)application:(UIApplication *)application viewControllerWithRestorationIdentifierPath:(NSArray *)identifierComponents 编码器:(NSCoder *)coder

我打电话:

NSPredicate* predicate = [coder decodeObjectForKey:@"predicate"];

我得到了错误:

[SMLocation initWithCoder:]: unrecognized selector sent to instance

这么看来,用来创建predicate的实体,也不得不采用NSCoding协议(protocol)。我觉得这很不方便,尤其是实现对多关系会很麻烦。

虽然我想像这里 ( http://aplus.rs/2013/using-state-preservation-with-core-data/ ) 这样使用它们的 ManagedObjectID 来保留实体,然后重新创建谓词,但在我看来,这将以非常笨拙的方式实现我的目标。

问题

是否有任何巧妙的解决方法来恢复 NSPredicate?

最佳答案

出于有限的目的,您似乎可以通过对 managedObjectID 进行编码来实现 NSCoding,您实际上并不需要保存和恢复整个对象,只需将 ID 保存在编码中并从 initWithCoder

返回正确的对象

类似于:

-(void)encodeWithCoder:(NSCoder*)coder
{
[coder encodeObject:[self.managedObjectID URIRepresentation] forKey:@"managedObjectID"];
}

-(id)initWithCoder:(NSCoder*)coder
{
NSURL* url = [coder decodeObjectForKey:@"managedObjectID"];
NSManagedObjectID* oid = [persistentStoreCoordinator managedObjectIDForURIRepresentation:url];
return [managedObjectContext objectWithId:oid];
}

关于ios - NSPredicate 状态恢复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23913713/

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