0

私はまだObjective-C/iOSの初心者であり、それほど長く学んでいないので、私の無知を許してください:)

アプリのコンテンツは、ユーザーの場所に基づいて変化します。"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. これが私が望むものを得る合理的な方法である場合、locationManager よりも performSegueWithIdentifier を配置できる場所はありますか? それを置くのは悪い場所のように思えます (そして、アプリでさらに問題が発生するかどうかはわかりません) が、それを LocationViewController または didFinishLaunchingWithOptions: のいずれかに移動すると、機能しなくなります。

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

4

1 に答える 1

0

これはかなりハックな方法のように思えますが、うまくいく可能性があります。この特定の方法について私がお勧めする唯一のことは、必要なものが見つかったら場所の更新をlocationManager 停止[locationManager stopUpdatingLocation]することです ( )。そうしないと、sree charan前述のように、 への呼び出しが大量に発生し、 への呼び出しが大量にlocationManager:didUpdateToLocation:fromLocation:生成されperformSegueWithIdentifier:sender:ます。

余談ですが、アプリのデリゲートではなく LocationViewController でこの場所の更新を行う方がよいと思いますが、これは実質よりもスタイルに関係している可能性があります。

于 2012-04-30T18:31:43.353 に答える