2

多くのエンティティが特定の 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 で != を実行できるはずですが、それを実行するための正しい述語構文がわかりません。誰でも私を啓発できますか?

4

1 に答える 1

6

次のようなことができます。

- (void) clearObjectsExceptFor:(NSManagedObject *)exception {
  NSPredicate * allExcept = [NSPredicate predicateWithFormat:@"SELF != %@", exception];
  NSArray * objects = [self fetchMyManagedObjectsWithPredicateOrNil:allExcept];
  for (NSManagedObject * object in objects) {
    [managedObjectContext deleteObject:object];
  }
}
于 2010-06-04T02:16:02.643 に答える