2010-06-04 3 views
2

У меня есть хранилище основных данных, в котором многие из сущностей должны быть уникальными экземплярами своего конкретного NSEntityDescription. В настоящее время я делаю это путем создания нового юридического лица для данного описания, то это:Синтаксис NSPredicate для исключения данного объекта NSManagedObject

-(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, а не в итерации! , но я просто не могу понять правильный синтаксис предиката для этого. Может ли кто-нибудь просветить меня?

ответ

6

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

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

Y'know, я мог бы поклясться, что я попробовал это, но я просто сделал снова, и она работала * FACEPALM. Благодаря! –

+0

Я тоже встречаюсь с этой ошибкой - на устройстве были показаны неправильные результаты, но на устройстве это нормально – Shmidt

Смежные вопросы