0

CLGeocoder geocodeAddressStringの呼び出しは非同期であり、完了時にコールバックを処理するためにブロックが渡されることを理解しています。また、ブロック内で変更可能な変数はローカル__block変数のみであることも理解しています。しかし、結果のCLPlacemarksをグローバルNSMutableArray変数に格納する必要があり、それがどのように発生するかを理解できません。__block変数には同じメソッド内でのみアクセスできますが、値が設定されている時点(つまり、ブロック内)では、グローバル配列に値を割り当てることはできません。ブロック後、非同期geocodeAddressStringを呼び出すとすぐに返されるため、__block変数には値がない可能性があります。

呼び出しの結果を保存して、UITableViewの更新に使用できるようにするにはどうすればよいですか?

4

1 に答える 1

0

わかりました、解決しました。私は(ブロックについての私の読書から)プロパティとインスタンス変数がブロックのスコープ内で変更できないと誤って推測していました。私の場合、iVarアレイを変更できなかった理由は、iVarアレイを割り当て/初期化していないためです。それを行うと、値を割り当てて、ブロックの外、たとえばテーブルビューのcellForRowAtIndexPathメソッドでそれらを表示することができました。

私の最初の仮定に惑わされたかもしれない人に謝罪します!ちなみに、Apple docs re blocks&variablesのテキストは少し誤解を招くと思います...可変であると言及されている唯一の変数は__block関数レベルの変数ですが、他のすべての変数は「 「アクセス可能」という意味で「読み取り専用」と見なしました(ゲッターとセッターの両方がアクセサーであることは知っていますが、コンテキストが混乱していました)。

于 2012-10-05T14:43:39.690 に答える