NSInvocationOperation init从类方法返回nil调用实例方法

时间:2012-06-15 02:07:04

标签: ios concurrency nsoperation nsoperationqueue

我正在尝试将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

该节也在类方法中运行 - 我打算调用该类并指示它推送所有资产。

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

您无法在类对象上调用实例方法。如果您希望-pushAsset继续作为实例方法,那么您必须为NSOperation提供一个实例来调用它(并且该实例必须在操作运行时仍然存在)。您想要执行-pushAsset操作的对象是什么?那就是应该用作Target的论点。

相关问题