Почему мой завершающий блок никогда не вызывается в 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];
...
}

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

Затем в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 finishes.I»

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

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

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

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