NSPredicate 语法以排除给定的 NSManagedObject
Posted
技术标签:
【中文标题】NSPredicate 语法以排除给定的 NSManagedObject【英文标题】:NSPredicate syntax to exclude a given NSManagedObject 【发布时间】:2010-06-04 01:57:34 【问题描述】:我有一个核心数据存储,其中许多实体应该是其特定 NSEntityDescription 的唯一实例。我目前正在通过为给定描述创建一个新实体来做到这一点,然后:
-(void)clearMyManagedObjectsExceptFor:(NSManagedObject*)except
NSArray *managedObjects = [ self fetchMyManagedObjectsWithPredicateOrNil: nil ];
// returns all managed objects for a given NSEntityDescription
NSManagedObject *managedObject;
for( NSUInteger i = 0; i < [ managedObjects count ]; i++ )
managedObject = [ managedObjects objectAtIndex: i ];
if( ![ managedObject isEqual: except ] )
[ managedObjectContext deleteObject: managedObject ];
这可行,但感觉我应该能够做到这一点!= 使用 NSPredicate 而不是在迭代中,但我只是想不出正确的谓词语法来做到这一点。谁能赐教?
【问题讨论】:
【参考方案1】:你可以这样做:
- (void) clearObjectsExceptFor:(NSManagedObject *)exception
NSPredicate * allExcept = [NSPredicate predicateWithFormat:@"SELF != %@", exception];
NSArray * objects = [self fetchMyManagedObjectsWithPredicateOrNil:allExcept];
for (NSManagedObject * object in objects)
[managedObjectContext deleteObject:object];
【讨论】:
你知道,我可以发誓我试过了,但我又试了一次,而且效果很好*facepalm。谢谢! 我也遇到过这个错误——在设备上显示错误的结果,但在设备上没问题以上是关于NSPredicate 语法以排除给定的 NSManagedObject的主要内容,如果未能解决你的问题,请参考以下文章
如何在 NSPredicate 中重现 MATCHES 以查询 Realm?
NSPredicate 从 PHFetchResults 中排除慢动作视频
NSPredicate 与关系 @"SELF.<relationship>.<relationship>.<object> == %@"