【问题标题】:NSPredicate syntax to exclude a given NSManagedObjectNSPredicate 语法以排除给定的 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 而不是在迭代中,但我只是想不出正确的谓词语法来做到这一点。谁能赐教?

【问题讨论】:

    标签: iphone core-data nspredicate nsmanagedobject


    【解决方案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。谢谢!
    • 我也遇到过这个错误——在设备上显示错误的结果,但在设备上没问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-19
    • 1970-01-01
    相关资源
    最近更新 更多