ios geocodeAddressString在块期间修改全局变量

时间:2012-10-05 12:54:40

标签: ios objective-c-blocks clgeocoder

据我所知,对CLGeocoder geocodeAddressString的调用是异步的,传入一个块来处理完成时的回调。我也明白,块中唯一可变的变量是local __block变量。但我需要将生成的CLPlacemarks存储在全局NSMutableArray变量中,我无法弄清楚如何发生这种情况。任何__block变量只能在同一个方法中访问,但是当它们具有任何值时(即在块内)我不能将任何值赋给全局数组。在块之后,由于在调用异步geocodeAddressString时立即返回,__block变量可能没有任何值。

如何存储调用结果,以便它们可用于更新UITableView?

1 个答案:

答案 0 :(得分:0)

好的,解决了。我错误地推断(从我的关于块的读数),在块的范围内无法修改属性和实例变量。在我的情况下,我无法修改我的iVar数组的原因是我没有分配/初始化它。一旦我这样做,我就可以分配值并在块之外看到它们,例如在我的表视图的cellForRowAtIndexPath方法中。

向可能被我最初的假设误导的任何人致歉!为了记录,我确实认为Apple文档中的文本重新阻止&变量here有点误导......它提到的唯一可变的变量是__block函数级变量,而它表示所有其他变量“可以被访问”,我将其视为“只读” (我知道getter和setter都是访问者,但上下文令人困惑)。