¿Por qué nunca se llama a mi bloqueo de finalización en una NSOperation?

He subpasado una NSOperation y configuré mi finalización Bloquear, pero parece que nunca se ingresa, incluso cuando finaliza la operación. Aquí está mi código:

Una clase de controlador de catálogo configura la NSOperation:

- (void)setupOperation {
...

    ImportWordOperation *importWordOperation = [[ImportWordOperation alloc] initWithCatalog:words];
    [importWordOperation setMainObjectContext:[app managedObjectContext]];
    [importWordOperation setCompletionBlock:^{
        [(ViewController *)[[app window] rootViewController] fetchResults];
    }];
    [[NSOperationQueue mainQueue] addOperation:importWordOperation];
    [importWordOperation release];
...
}

Como puede ver, estoy configurando el bloque de finalización para ejecutar un método en el subproceso principal, en algún otro controlador.

Entonces, enmain mi clase NSOperation subclasificada:ImportWordOperation.m, Enciendo la operación de fondo. Incluso anuléisFinished iVar para que se active el método de finalización:

- (void)setFinished:(BOOL)_finished {
    finished = _finished;
}

- (BOOL)isFinished {
    return (self.isCancelled ? YES: finished);
}

- (void)addWords:(NSDictionary *)userInfo {
    NSError *error = nil;

    AppDelegate *app = [AppDelegate sharedInstance];

    NSManagedObjectContext *localMOC = [userInfo valueForKey:@"localMOC"];
    NSEntityDescription *ent = [NSEntityDescription entityForName:@"Word" inManagedObjectContext:localMOC];
    for (NSDictionary *dictWord in [userInfo objectForKey:@"words"]) {
        Word *wordN = [[Word alloc] initWithEntity:ent insertIntoManagedObjectContext:localMOC];

        [wordN setValuesForKeysWithDictionary:dictWord];
        [wordN release];
    }

    if (![[userInfo valueForKey:@"localMOC"] save:&error]) {
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }
    [localMOC reset];

    [self setFinished:YES];
}


- (void)main {

    finished = NO;

    NSManagedObjectContext *localMOC = nil;
    NSUInteger type = NSConfinementConcurrencyType;
    localMOC = [[NSManagedObjectContext alloc] initWithConcurrencyType:type];
    [localMOC setUndoManager:nil];
    [localMOC setParentContext:[self mainObjectContext]];

    if (![self isCancelled]) {
        if ([self.words count] > 0) {
            [self performSelectorInBackground:@selector(addWords:) withObject:@{@"words":self.words, @"localMOC":localMOC}];
        }
    }
}

Si elimino los métodos de acceso finalizados, entonces se llama al bloque de finalización pero mucho antesImportWordOperation acabados

He leído el código que he encontrado que utiliza su propio bloque de finalización, pero ¿cuál es el uso del bloque de finalización en las subclases de NSOperation?

Cualquier idea o punto a una situación similar resuelta sería muy apreciada.