2010-06-04 5 views
2

J'ai un magasin de données principales dans lequel de nombreuses entités doivent être des instances uniques de leur description NSEntityDescription particulière. Je fais actuellement en créant une nouvelle entité pour une description donnée, ceci:Syntaxe NSPredicate pour exclure un objet NSManagedObject donné

-(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 ]; 
     } 
    } 
} 

Ce qui fonctionne, mais il se sent comme je devrais être en mesure de le faire = avec un NSPredicate plutôt que dans l'itération! , mais je ne peux pas trouver la bonne syntaxe de prédicat pour le faire. Quelqu'un peut-il m'éclairer?

Répondre

6

Vous pouvez faire quelque chose comme ceci:

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

Tu sais, je pourrais jurer que j'avais essayé, mais je viens de le faire à nouveau et cela a fonctionné * facepalm. Merci! –

+0

J'ai rencontré ce bug aussi - sur l'appareil des résultats erronés ont été montrés, mais sur l'appareil c'est OK – Shmidt

Questions connexes