Objective c 如何在块中保留对象的值?
场景: 我声明了一个ParseObjective 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
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是对的。