【问题标题】:ios geocodeAddressString modify global variable during blockios geocodeAddressString 在块期间修改全局变量
【发布时间】:2012-10-05 12:54:40
【问题描述】:

我了解对 CLGeocoder geocodeAddressString 的调用是异步的,传入一个块以在完成时处理回调。我也知道块内唯一可变的变量是局部 __block 变量。但是我需要将生成的 CLPlacemarks 存储在全局 NSMutableArray 变量中,我无法弄清楚这是如何发生的。任何 __block 变量只能在同一个方法中访问,但在它们具有任何值(即在块内)时,我无法为全局数组分配任何值。块之后,__block 变量可能没有任何值,因为调用异步 geocodeAddressString 时立即返回。

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

【问题讨论】:

    标签: ios objective-c-blocks clgeocoder


    【解决方案1】:

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

    向可能被我最初的假设误导的任何人道歉!作为记录,我确实认为 Apple docs re blocks & variables here 上的文本有点误导......它提到的唯一可变变量是 __block 函数级变量,而它说的是所有其他变量“可以访问”,我将其理解为“只读”(我知道 getter 和 setter 都是访问器,但上下文令人困惑)。

    【讨论】:

    • 您总是在访问(即读取)对象指针变量以向其发送消息或访问它指向的对象的字段。更改变量意味着分配给它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-03
    • 2022-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多