我正在使用此方法,以便从lat/long
获取timeZone
。
-(void)getTimeZoneFromLatLong
{
CLLocation *location = [[CLLocation alloc] initWithLatitude:self.parentVC.currentCity.latitude.doubleValue longitude:self.parentVC.currentCity.longitude.doubleValue];
CLGeocoder *geoCoder = [[CLGeocoder alloc]init];
[geoCoder reverseGeocodeLocation: location completionHandler:^(NSArray *placemarks, NSError *error)
{
CLPlacemark *placemark = [placemarks objectAtIndex:0];
_placemark = placemark;
}];
}
然后我可以使用timeZone
来致电:
EDSunriseSet *eds = [EDSunriseSet sunrisesetWithTimezone:_placemark.timeZone
latitude:latitude.doubleValue longitude:longitude.doubleValue];
EDSunriseSet
是一个库,以从lat/long
和timeZone
获取Sunrise/Sunset
值。
它运行得很好,但是Crashlytics
警告我[CLPlacemark timeZone]
与iOS8
不相容。
如何适应iOS8
的代码?
编辑: [_placemark timezone]
和_placemark.timezone
都接受了吗?
可从iOS 9获得。
/*
* timeZone
*
* Discussion:
* Returns the time zone associated with the placemark.
*/
@available(iOS 9.0, *)
open var timeZone: TimeZone? { get }
对于iOS 8,尝试此
CLLocation *currentLocaiton = [[CLLocation alloc] initWithLatitude:latitude longitude:longitude];
[geoCoder reverseGeocodeLocation:currentLocaiton completionHandler:^(NSArray *placemarks, NSError *error) {
if (error == nil && [placemarks count] > 0) {placeMark = [placemarks lastObject];
NSRegularExpression regex = [NSRegularExpression regularExpressionWithPattern:@"identifier = "[a-z]*\/[a-z]_*[a-z]*"" options:NSRegularExpressionCaseInsensitive error:NULL];
NSTextCheckingResult *newSearchString = [regex firstMatchInString:[placeMark description] options:0 range:NSMakeRange(0, [placeMark.description length])];
NSString *substr = [placeMark.description substringWithRange:newSearchString.range]; NSLog(@"timezone %@",substr);
}