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

クラス オブジェクトでインスタンス メソッドを呼び出すことはできません。-pushAsset を引き続きインスタンス メソッドにしたい場合は、NSOperation に、それを呼び出すインスタンスを与える必要があります (そして、そのインスタンスは、操作の実行時にまだ存在している必要があります)。-pushAsset 操作を実行するオブジェクトは何ですか? これは、Target 引数として使用する必要があります。

于 2012-06-15T13:34:33.973 に答える
1

self はクラス オブジェクトで、push アセットはインスタンス メソッドであり、これが問題になる可能性があります。プッシュ アセットをクラス メソッドに変更するとどうなりますか?

于 2012-06-15T02:26:15.623 に答える