我正在尝试将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
该节也在类方法中运行 - 我打算调用该类并指示它推送所有资产。
搜索了我能找到的与此案相关的所有文档后,我看不出我做错了什么。
答案 0 :(得分:1)
self是类对象,push属性是一种实例方法,可能是问题所在。如果将push资产更改为类方法会发生什么?
答案 1 :(得分:1)
您无法在类对象上调用实例方法。如果您希望-pushAsset继续作为实例方法,那么您必须为NSOperation提供一个实例来调用它(并且该实例必须在操作运行时仍然存在)。您想要执行-pushAsset操作的对象是什么?那就是应该用作Target的论点。