Почему мой завершающий блок никогда не вызывается в NSOperation?

Я вложил в NSOperation и установил свой блок завершения, но он, кажется, никогда не входит, даже когда операция завершается. Вот мой код:

Класс контроллера каталога устанавливает 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];
...
}

Как видите, я устанавливаю блок завершения для выполнения метода в главном потоке, в каком-то другом контроллере.

Затем вmain мой подкласс класса NSOperation:ImportWordOperation.mЯ запускаю фоновую операцию. Я даже переборщилisFinished iVar для того, чтобы метод завершения был запущен:

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

Если я удаляю методы доступа isFinished, то блок завершения вызывается, но гораздо раньшеImportWordOperation отделки.

Я прочитал код, который я обнаружил, который использует свой собственный блок завершения, но тогда зачем вообще использовать блок завершения в подклассах NSOperation?

Любые идеи или указать на подобную разрешенную ситуацию будет принята с благодарностью.

Ответы на вопрос(2)

Ваш ответ на вопрос