【发布时间】:2011-05-23 19:49:30
【问题描述】:
我继承了 NSOperation 并实现了 main 方法。当我将它添加到 NSOperationQueue 时,它没有被调用。我将它与做的示例代码和示例项目进行了比较 工作,看不出问题所在。请问有谁遇到过这个问题,请问是什么原因造成的?
在疯狂地寻找问题之后,我决定从头开始,重建我的课程并在每一步进行测试。在标题中,我将它声明为 NSOperation 的子类。在实现文件中,我实现了 main 并且只放了几行:sleep(3); NSLog..;。都好。当我开始添加属性,甚至声明委托等时,每个步骤都有效。
最后,主要是我把代码用到了 NSDirectoryEnumerator。突然间,main 根本没有被调用。不仅如此,当我把那个代码拿出来时,它仍然不起作用!!我尝试重新启动 XCode 4,重新启动我的机器(不是我知道为什么这些可能会有所帮助,但我的想法已经不多了),但都无济于事。
任何线索都将不胜感激。谢谢。
更新:我(再次!)从头开始,但这次我以不同的顺序组装零件......现在它可以工作了!但是,万一我做错了什么,而这次我很幸运,这是@Andrew建议的@interface部分:
@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
【问题讨论】:
-
查看@interface 部分以确保您正确地对其进行子类化会有所帮助
-
我从头开始重新构建它,但这次以不同的顺序并且它可以工作......但是,无论如何我都会粘贴到@interface,以防有人注意到不正确的东西:跨度>
-
您的
NSOperation子类是并发的吗?仅当操作不并发时,-main才会自动调用。 -
"non-cooncurrent" 意味着我已经编写了自定义子类,然后在
@implementation块内实现了- (void)main,对吗?如果是这样,那就是我所做的。令人费解的是,为什么在我进行一些更改之前调用了main,然后,即使在我尝试撤消这些更改之后,它仍然没有被调用。现在它被调用了,因为我从最简单的实现开始(我的main只有sleep(3); NSLog("I've finished");然后从那里开始 -
我猜你的 -(void)main 方法签名可能不正确。请注意,它不是 (int)main() 与标准 C 程序的 main() 一样。 - 这是一个实例方法,返回 void,没有参数 -(void)main ...
标签: macos cocoa nsoperation nsoperationqueue