我已经解决这个问题有一段时间了,我需要一些帮助来设计我的逻辑。
我想按此顺序做三件事 1) 获取用户的位置 2) 使用该用户的位置调用 Web 服务 3) 使用结果加载用户界面
我希望它的设计方式使我可以轻松地刷新结果,因此如果用户按下刷新按钮,我会再次执行步骤 1-3。
现在,我这样做如下。这是我在 ViewController 中的代码。
- (void) viewDidLoad {
//initialize CLLocationManager
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
self.locationManager.delegate = self;
[self.locationManager startUpdatingLocation];
- (void) locationManager: (CLLocationManager *)manager
didUpdateToLocation: (CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation
{
if (oldLocation!= nil) { // make sure to wait until second latlong value
[self setLatitude:newLocation.coordinate.latitude];
[self setLongitude: newLocation.coordinate.longitude];
[self.locationManager stopUpdatingLocation];
self.locationManager.delegate = nil;
[self makeUseOfLocationWithLat:[self getLatitude] andLon:[self getLongitude]];
}
- (void) makeUseOfLocationWithLat: (double) lat andLon: (double) lon {
// call web service
[self loadUI];
}
- (void) loadUI {
// loads the user interface
}
如果我错了,请纠正我,但我的设计真的很糟糕。它根本不是模块化的,每种方法都是相互关联的。此外,我在 ViewController 中进行密集的 Web 服务调用,而不是在任何模型类中。你如何正确设置它?我遇到的主要问题之一是......我不知道我的纬度和经度变量何时获得它们的值。如果我不从我的委托方法中调用 makeUseOfLocation ,那么我最终会调用 makeUseOfLocation 并使用latitude 和 longitude 的 nil 值。
我已经为我的位置管理、NSKeyValueObserving 协议、dispatch_queues、NSOperations 研究了单例,但我是在 iOS 上开发的新手,无论我尝试什么,我都会陷入困境。请让我知道您对如何设置的想法。
谢谢你的时间,我真的很感激。