Синтаксис NSPredicate для исключения заданного NSManagedObject - PullRequest
2 голосов
/ 04 июня 2010

У меня есть базовое хранилище данных, в котором многие объекты должны быть уникальными экземплярами их конкретной 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 Ответ

6 голосов
/ 04 июня 2010

Вы можете сделать что-то вроде этого:

- (void) clearObjectsExceptFor:(NSManagedObject *)exception {
  NSPredicate * allExcept = [NSPredicate predicateWithFormat:@"SELF != %@", exception];
  NSArray * objects = [self fetchMyManagedObjectsWithPredicateOrNil:allExcept];
  for (NSManagedObject * object in objects) {
    [managedObjectContext deleteObject:object];
  }
}
...