Objective c 如何在块中保留对象的值?

Objective c 如何在块中保留对象的值?,objective-c,xcode,parse-platform,properties,weak-references,Objective C,Xcode,Parse Platform,Properties,Weak References,场景: 我声明了一个ParsePFObject(它是NSObject的子类): PFObject *Event = [PFObject objectWithClassName:@"Event"]; 后来我有了一个CLGeocoder: CLGeocoder *ceo = [[CLGeocoder alloc]init]; CLLocation *loc = ... [ceo reverseGeocodeLocation:loc preferredLo

场景:

我声明了一个Parse
PFObject
(它是
NSObject的子类)

 PFObject *Event = [PFObject objectWithClassName:@"Event"];
后来我有了一个
CLGeocoder

CLGeocoder *ceo = [[CLGeocoder alloc]init];
CLLocation *loc = ...

[ceo reverseGeocodeLocation:loc
                    preferredLocale:[NSLocale localeWithLocaleIdentifier:@"pl_PL"]
                  completionHandler:^(NSArray *placemarks, NSError *error) {
                      CLPlacemark *placemark = [placemarks objectAtIndex:0];
                      if (placemark) {

                          Event[@"StreetName"] = ...

                      }
                  }
];
问题:

当我想通过调用
[Event save]
来保存此
PFObject
时(在块外部),事件内部的所有字段都会上载,除了块中的此字段,因为值不会保留在块外部

我的方法:


我认为它可以帮助创建一个弱属性,但是由于某种原因,我单击了触发iAction的按钮,上面的所有内容都包含在其中,什么也没有发生

我不确定这是否是您缺少的异步概念,或者您正在寻找的
\u块
。我不确定这是否与在主线程上执行块有关,但我非常确定\u块只能用于基本数据类型。如果在块外调用
[事件保存]
,它将在执行
reverseGeocodeLocation
之前运行,并分配
事件[@“StreetName”]
,因为
reverseGeocodeLocation
是一种异步方法。所以你不能这么做。如果要使用
reverseGeocodeLocation
的结果调用
[事件保存]
,则必须在
completionHandler
块内执行。该块只能用于基本数据类型是,这是因为只捕获“基本”数据类型。如果在块内捕获指针,特别是对象引用,则保留指针的值,而不是指针指向的对象。对象本身是不稳定的但这与您的Q无关。@Davi是对的。我不确定您是否缺少异步概念,或者您正在寻找的
\uu块
。不确定它是否与在主线程上执行块有关,但我非常确定u块只能用于基本数据类型。如果您调用
[Event save]
在块外,它将在执行
reverseGeocodeLocation
之前运行,并且分配
事件[@“StreetName”]
,因为
reverseGeocodeLocation
是一种异步方法。所以你不能这么做。如果要使用
reverseGeocodeLocation
的结果调用
[事件保存]
,则必须在
completionHandler
块内执行。该块只能用于基本数据类型是,这是因为只捕获“基本”数据类型。如果在块内捕获指针,特别是对象引用,则保留指针的值,而不是指针指向的对象。对象本身是不稳定的但这与你的问题无关。@Davi是对的。