我只想说我仍然是一个Objective-C / iOS菜鸟,我没有那么长时间学习它,所以请原谅我的无知:)
我的应用内容会根据用户的位置而变化。我希望在加载任何内容之前显示"ThisApp" would like to use your current location
对话框,以避免内容不得不重新加载。
我注意到某些应用似乎仍然在启动图片页面(显示Default.png的页面)上显示该位置弹出窗口。我做了很多谷歌搜索,但找不到任何东西(可能是因为我不知道正确的术语)。
我实现这个的方法是让我的应用程序首先进入我的LocationViewController,这只包含默认代码,没有更改,并且在故事板中它只有一个带有Default.png的图像视图。然后我有一个segue从位置控制器(LocationViewControllerSegue)到主视图控制器。
我的AppDelegate.h看起来像这样:
#import <UIKit/UIKit.h>
#import <CoreLocation/CoreLocation.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate, CLLocationManagerDelegate> {
CLLocationManager *locationManager;
}
@property (strong, nonatomic) UIWindow *window;
@end
我的AppDelegate.m:
#import "AppDelegate.h"
@implementation AppDelegate
@synthesize window = _window;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
if (locationManager == nil)
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.desiredAccuracy = kCLLocationAccuracyKilometer;
locationManager.distanceFilter = 16000;
[locationManager startUpdatingLocation];
return YES;
}
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation {
[self.window.rootViewController performSegueWithIdentifier:@"LocationViewControllerSegue" sender:self.window.rootViewController];
}
... snip a bunch of default generated code ...
@end
有没有比我的幻觉位置视图控制器方法更好的方法呢?
如果这是一种合理的方式来获得我想要的东西,那么在某个地方我可以放置performSegueWithIdentifier而不是在locationManager中吗?它似乎是一个糟糕的地方(并不确定它是否会在应用程序中引起问题?),但将其移动到LocationViewController或didFinishLaunchingWithOptions:停止它工作。
任何帮助我指向正确方向的人都将不胜感激。谢谢:))
答案 0 :(得分:0)
这看起来像一个相当hacky的方法,但可能有用。对于这种特定方法,我唯一建议的是让locationManager
停止 在找到所需内容后更新位置({{ 1}})。否则,正如[locationManager stopUpdatingLocation]
所述,您会收到大量来自sree charan
的电话,这些电话会产生大量locationManager:didUpdateToLocation:fromLocation:
的来电。
顺便说一下,我想我可能宁愿在你的LocationViewController而不是app委托中进行这个位置更新,但它可能更多地与样式而不是实质相关。