2012-05-07 11 views
1

私はすでに2日間私のコードで何が間違っているかを理解しようとしています。アイデアがあることを願っていますか?NSOperation in global queue

私は "global"キューとしてNSOperationQueueを作成して、そのviewController内のどのメソッドからでも操作を追加できるようにしようとしています。グローバルにするために.hファイルにキューを定義しようとする前に、私はそれを最初に必要としたメソッドの中に作成し、Operationsを追加することができました。これはうまくいった。しかし、元のメソッドの外側からキュー内にアクティブな操作があるかどうかを確認したいのですが、メソッドの中で宣言していたので、明らかにできませんでした。だから私は、次のコードでの.hにそれを宣言しようとした:

@property (strong, nonatomic) NSOperationQueue *queue; 

と.mファイルの先頭に:

@synthesize queue; 

これは私がキューにオペレーションを追加したコードです。

NSInvocationOperation *doMorse = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(morse) object:nil]; 

[self.queue addOperation:doMorse]; 

問題は、操作を追加しようとするとキューが空のままであることです。 (以前は正常に動作していました)キューが間違っていると宣言しましたか?ちなみに、私が試した方法以外の方法でキューにアクセスできるようにするには、より良い解決策がありますか? (同じviewController(任意のビューからうまくいくならそれはすばらしいでしょう:-))))。

ありがとうございました!

+0

実行中のARCでは、デフォルトでイーバールが強くなります。しかしプロパティは弱いですあなたの財産を強いと宣言しているか、古い学校のままにしておいてください。 –

+0

待ち行列 'nil'はおそらくありますか? –

+0

どうすればわかりますか? – Linus

答えて

1

実際にはを作成する必要があります。キューを作成してください。 。あなただけでキューを格納するためのインスタンス変数を宣言して、あなたのコンストラクタで

(initメソッド)を、追加します。 self.queue = [[NSOperationQueue alloc] init]

それはもはや前にではなく、働いていた場合、あなたはおそらく別のコンストラクタを呼び出す始めました。私がよくする間違いは、私のカスタムビューでinitWithFrameの設定を行うことです。しかし、ペン先のビューを使用するとinitWithCoder:が呼び出されます。