从 iOS 应用程序中的多个视图重复调用地理位置单例类
Posted
技术标签:
【中文标题】从 iOS 应用程序中的多个视图重复调用地理位置单例类【英文标题】:Repeat Calls to geolocation Singleton class from multiple views in iOS app 【发布时间】:2014-07-30 07:18:03 【问题描述】:在阅读了一些关于堆栈溢出的建议和其他一些文章后,我实现了一个单例类,它允许我调用一个方法来更新用户的当前位置。为了避免不断更新位置信息,我添加了一个 StopUpdatingPosition 调用。这第一次可以正常工作,但是后续调用失败。
我相信这是因为在提供的示例中启动地理定位的方式,它检查单例是否已经到位(?)
如果一个单例被初始化,它会保留在内存中吗?在随后的通话中,我是否可以检查是否是这种情况并请求它开始更新位置?
这是我迄今为止尝试过的。
- (id)init
self = [super init];
if(self)
self.locationManager = [CLLocationManager new];
[self.locationManager setDelegate:self];
[self.locationManager setDistanceFilter:kCLDistanceFilterNone];
[self.locationManager setHeadingFilter:kCLHeadingFilterNone];
[self.locationManager startUpdatingLocation];
geocoder = [[CLGeocoder alloc] init];
return self;
+ (LocationFunction*)sharedSingleton
static LocationFunction* sharedSingleton;
if(!sharedSingleton)
@synchronized(sharedSingleton)
sharedSingleton = [LocationFunction new];
return sharedSingleton;
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
NSLog(@"didUpdateToLocation: %@", newLocation);
CLLocation *currentLocation = newLocation;
if (currentLocation != nil)
myLat = [NSString stringWithFormat:@"%.8f", currentLocation.coordinate.latitude];
myLong = [NSString stringWithFormat:@"%.8f", currentLocation.coordinate.longitude];
// Store the Long & Lat to global variables here
NSLog(@"Resolving the Address");
else
// Handle location lookup fail here
];
[manager stopUpdatingLocation];
我正在寻找一种从不同视图控制器调用外部类中的方法的方法。此方法获取用户的当前位置(经纬度),将信息记录在全局变量中,停止任何更新位置方法的请求,并在完成时通知视图控制器。
感谢指点。
【问题讨论】:
你在帖子的不同地方谈论了什么例子。愿意提供链接吗? 您正在使用的委托方法已弃用 - 请参阅 CLLocationManagerDelegate 参考。我将删除对开始/停止更新位置的调用,并在您的单例类上提供执行此操作的实例方法。然后,您可以根据需要调用它们。单例将保留在内存中,因为它持有对自身的引用。 @Paulw11 谢谢。我会看看你的建议。 @Andy897 恐怕我手头没有。 【参考方案1】:另一个*** question 有一个提供解决方案的答案。但是请注意,调用不正确(我无法对答案发表评论 - 对于***来说太新了!)。它应该引用“sharedManager”:
- (void)viewDidLoad
[super viewDidLoad];
[[MyClass sharedManager] startCapture];
希望这对搜索的人有所帮助。
【讨论】:
以上是关于从 iOS 应用程序中的多个视图重复调用地理位置单例类的主要内容,如果未能解决你的问题,请参考以下文章