Главное в моем подклассе NSOperation не вызывается - PullRequest
2 голосов
/ 23 мая 2011

Я вложил в подкласс NSOperation и реализовал основной метод.Когда я добавил его в NSOperationQueue, он не вызывался.Я сравнил его с примерами кода и примерами проектов, которые делают работают и не мог понять, в чем проблема.У кого-нибудь есть опыт с этой проблемой и чем она вызвана, пожалуйста?

После сумасшествия, пытаясь найти проблему, я решил начать с нуля, перестраивать свой класс и тестировать его на каждом этапе.В шапке я объявил это подклассом NSOperation.В файле реализации я реализовал main и поместил только пару строк: sleep(3);NSLog..;.Все хорошо.Каждый шаг работал, когда я начинал добавлять свойства, даже объявлял делегат и т. Д.

Наконец, в основном я поместил код для использования NSDirectoryEnumerator.Внезапно главный не был вызван вообще.Мало того, что когда я взял этот код обратно, он все еще не работает !!Я попытался перезапустить XCode 4, перезапустить мою машину (не знаю, почему они могут помочь, но у меня заканчиваются идеи), но все безрезультатно.

Любые подсказки были бы наиболее ценными.Спасибо.


Обновление: я начал заново (снова!) С нуля, но на этот раз я собрал детали в другом порядке ... и теперь это работает!Однако, если что-то я делаю не так, и мне просто повезло на этот раз, вот раздел @interface, как предложил @Andrew:

@class ScanOperation;

@protocol ScanOperationDelegate 
-(void)fileFound:(ScanOperation *)operation;
-(void)finishedScanOperation:(ScanOperation *)operation;
@end

#import <Foundation/Foundation.h>

@interface ScanOperation : NSOperation {
@private
    NSObject <ScanOperationDelegate> *delegate;
    NSURL *rootUrl;
    int totCount, dirCount, filCount, errCount;
    NSTimeInterval elapsed;
}
- (id)initWithScanRootUrl:(NSURL *)startAtUrl;

@property (readwrite, assign) NSObject <ScanOperationDelegate> *delegate;
@property (readonly) int totCount, dirCount, filCount, errCount;
@property (readonly) NSTimeInterval elapsed;
@end

Ответы [ 2 ]

1 голос
/ 11 января 2012

У меня тоже было такое. Как обычно, это был я: я не инициализировал OperationQueue для запуска Операции.

0 голосов
/ 26 ноября 2013

Я встречал этот вопрос только сейчас. 1) инициализировать OperationQueue 2) добавить свою операцию в эту очередь 3) очистить свой проект 4) пробег

...