Iphone 在目标C中更改块中的变量
我有个问题。我想更改块中的局部变量。我什么都试过了。我放了变量_块的开头,但没有什么可更改的。我无法更改块中的myString值。你能帮我吗?这是我的密码:Iphone 在目标C中更改块中的变量,iphone,objective-c,block,Iphone,Objective C,Block,我有个问题。我想更改块中的局部变量。我什么都试过了。我放了变量_块的开头,但没有什么可更改的。我无法更改块中的myString值。你能帮我吗?这是我的密码: - (IBAction)setButtonPressed:(id)sender { placeName = [[[NSMutableString alloc] init] retain]; __block NSMutableString *myString = [[NSMutableString alloc] init];
- (IBAction)setButtonPressed:(id)sender {
placeName = [[[NSMutableString alloc] init] retain];
__block NSMutableString *myString = [[NSMutableString alloc] init];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSDate *today = [NSDate date];
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"dd.MM.yyyy hh:mm:ss"];
NSString *dateString = [dateFormat stringFromDate:today];
[previousParkingLon addObject:[NSNumber numberWithFloat:self.longitude]];
[previousParkingLat addObject:[NSNumber numberWithFloat:self.latitude]];
[previousParkingsDate addObject:dateString];
if((self.latitude != 0) && (self.longitude != 0))
{
self.geocoder = [[CLGeocoder alloc] init ];
[self.geocoder reverseGeocodeLocation:locationManager.location completionHandler:^(NSArray *placemarks, NSError *error) {
CLPlacemark *myplacemark = [placemarks objectAtIndex:0];
NSString *locatedAt = [[[myplacemark addressDictionary] objectForKey:@"FormattedAddressLines"] componentsJoinedByString:@", "];
[myString setString:locatedAt];
}];
}
[previousParkingsPlaceName addObject:placeName];
NSLog(@"Test %@",myString);
[defaults setObject:previousParkingLat forKey:@"historyLat"];
[defaults setObject:previousParkingLon forKey:@"historyLon"];
[defaults setObject:previousParkingsDate forKey:@"historyDate"];
[defaults setObject:previousParkingsPlaceName forKey:@"historyName"];
[defaults synchronize];
}
当
self.geocoder
完成其操作时执行块时,locatedAt
将在您使用NSLog
输出myString
后附加到myString
(iOS在继续之前不会执行块)。您会注意到,如果将NSLog
放入块中,值将成功输出
如果要使用
myString
的值执行操作,有两个选项。第一种方法是将利用myString
的代码包含在块内,或者将其放在函数中并从块内调用该函数。不要将代码直接放在块后面!第二个选项是在使用myString
的值之前检查块是否已执行。创建具有全局范围的布尔值,然后在块中将布尔值设置为“是”。然后,在使用myString
的值之前,您可以检查bool是否设置为YES。关键是地理编码器“异步”执行其完成块。在运行该方法的其余部分时,该块将不会运行
p、 s.
\uu块
无论如何都是不必要的,因为您没有在任何地方赋值给myString
变量您的问题是什么?并且可能会标记给您带来麻烦的代码行。您甚至不需要\uu块
,因为变量没有被赋值给其他值。还有一个问题是在执行块之前打印myString
的值谢谢你的回答,但我想在外部使用myString值。你能帮我一下吗?当然,给我一点时间。真的谢谢你。我正在处理这个问题4个小时,但我没有解决它:(让我知道编辑帮助是否感谢您的回答我尝试创建一个新函数进行更改,但我没有更改变量。-(void)changeString:(NSString*)value{[placeName setString:value];}感谢您的帮助:)