2

我正在尝试将 NSOperation 对象放入 NSOperationQueue。但似乎我误解了如何正确初始化 NSInvocationOperation (一个似乎为我的目的量身定制的子类,因为我想在操作队列中执行现有方法)。这是我正在尝试的:

OnlineServiceManager * sm = [[OnlineServiceManager alloc] initWithAsset:asset andViewController:viewController];
NSInvocationOperation * operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(pushAsset) object:sm];
[queue addOperation:operation];

该节在一个循环中运行,该循环提供要在操作中推送的新资产。当我调试这些行时,结果发现操作为 nil,表明找不到选择器。选择器是此类中的一个实例方法,具有以下签名:

- (void)pushAsset

该节也在类方法中运行——我的意图是调用该类并指示它推送所有资产。

在搜索了我能找到的与这个案例相关的所有文档后,我看不出我做错了什么。

4

2 回答 2

1

self 是类对象,而 push 资产是一个实例方法,这可能是问题所在。如果将推送资产更改为类方法会发生什么?

于 2012-06-15T02:26:15.623 回答
1

您不能在类对象上调用实例方法。如果您希望 -pushAsset 继续作为实例方法,那么您必须给 NSOperation 一个实例来调用它(并且该实例必须在操作运行时仍然存在)。您要执行 -pushAsset 操作的对象是什么?这就是应该用作 Target 参数的内容。

于 2012-06-15T13:34:33.973 回答