2012-04-30 25 views
0

ちょうど私がまだのObjective-C/iOS搭載のnoobだと言う私をみましょう、私は長いこと、そうメインビューコントローラが読み込まれる前に場所を読み込む方法は?

ユーザの位置に基づいて、私のアプリの内容が変化する自分の無知を:)言い訳してください、それを学習していません。コンテンツを読み込む前に、"ThisApp" would like to use your current locationダイアログが表示され、コンテンツを再読み込みする必要がなくなります。

起動画像ページ(Default.pngが表示されているページ)に表示されている場所のポップアップが表示されているアプリがあるようです。私はグーグルで多くのことをしましたが、何も見つけられませんでした(おそらく私は正しい用語を知らなかったので)。

私が実装した方法は、まず自分のアプリケーションを自分のLocationViewControllerに移動させることでした。これにはデフォルトコードと変更が含まれていました。ストーリーボードにはDefault.pngの画像ビューがあります。ロケーションコントローラー(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 
  1. はこれを行うには良い方法は、私の幻想的な場所・ビュー・コントローラよりも、あります方法?

  2. これは、私が欲しいものを得るための合理的な方法であれば、どこかでperformSegueWithIdentifierをlocationManagerよりも置くことができますか?それはそれを置くには悪い場所のように思えますが、アプリで問題がさらに発生するかどうかはわかりませんが、LocationViewControllerまたはdidFinishLaunchingWithOptionsに移動すると動作しなくなります。

私に正しい方向を指示する助けがあれば幸いです。ありがとう:)

+0

didUpdateToLocationは、名前が示唆するように、何回か呼び出されるだけで、現在の位置の座標を取得する必要があります。他のメソッドinitを呼び出すべきではありません。 – Charan

答えて

0

これはかなりハックのような方法ですが、動作するかもしれません。この特定の方法で推奨される唯一のことは、locationManagerstop[locationManager stopUpdatingLocation])の位置を更新することです。それ以外の場合は、sree charanと記されているように、locationManager:didUpdateToLocation:fromLocation:への一連の呼び出しが発生し、performSegueWithIdentifier:sender:に1トンの呼び出しが生成されます。

私はむしろ、アプリケーションデリゲートではなくLocationViewControllerでこの位置情報を更新するかもしれないと思っていますが、実際にはスタイルよりも多くのことがあります。

+0

それは私が好きなスタイルなので、私はそれを移動しました:) locationManagerコードの多くのおかげで、私は場所が私のログで数回チェックされて気づいたが、それについて何をすべきか分からなかった。そして、私は将来的にやりたいことをやるためのより良い(あまりハッキリしない)方法に注意を払っていきますが、これは今では十分です:)ありがとう。 – Delameko

関連する問題