17

iOS 6 の mapkit API でバグを発見した可能性があると思いますが、私はまだ新人だと考えているので、誰かが間違っている可能性があることを指摘できるかどうかを確認するためにここをチェックすると思いました。

マップビューを使用して数週間作業し、MKUserTrackingButton を使用して追跡モードを切り替えるアプリがあります。iOS 5 では正常に動作していましたが、6 にアップグレードしてから奇妙な動作をします。マップビューをユーザーが進行方向に追従する追跡モードにすると、比較的静止している場合は問題ありませんが、車で移動を開始すると、進行方向モードで追跡モードから脱落し、通常の追跡モードに戻ります。それを理解しようとして何時間もイライラした後、最小限のマップビューと追跡を備えた新しいシンプルなアプリを作成して、それが私のコーディングなのかバグなのかを確認することにしました。新しいアプリでも同じことができます。以下にすべてのコードを掲載します。私が何か間違ったことをしているかどうかを誰かが教えてくれることを願っています。

アプリのデリゲート ヘッダーは次のとおりです。

//  iTrackerAppDelegate.h
//  iTracker
//
//  Created by Victor Hudson on 9/22/12.
//  Copyright (c) 2012 Victor Hudson. All rights reserved.
//

#import <UIKit/UIKit.h>
#import "TrackerViewController.h"

@interface iTrackerAppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) IBOutlet UIWindow *window;

@end

アプリデリゲートの実装は次のとおりです

    //
    //  iTrackerAppDelegate.m
    //  iTracker
    //
    //  Created by Victor Hudson on 9/22/12.
    //  Copyright (c) 2012 Victor Hudson. All rights reserved.
    //

    #import "iTrackerAppDelegate.h"

    @implementation iTrackerAppDelegate

    @synthesize window = _window;

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        TrackerViewController *trackerView = [[TrackerViewController alloc] init];

        UINavigationController *navController = [[UINavigationController alloc]initWithRootViewController:trackerView];

        [self.window setRootViewController:navController];

        [[self window] makeKeyAndVisible];
        return YES;
    }

// the other app delegate methods are all empty so i left them out for brevity

    @end

これが私のビューコントローラーです。これには、worldView を含むペン先と、マップ モード (プレーン、サット、およびハイブリッド) を切り替えるためのセグメント化されたスイッチがあります。 TrackerViewController.h

//
//  TrackerViewController.h
//  iTracker
//
//  Created by Victor Hudson on 9/22/12.
//  Copyright (c) 2012 Victor Hudson. All rights reserved.
//

#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>
@interface TrackerViewController : UIViewController

@property (strong, nonatomic) IBOutlet MKMapView *worldView;

- (IBAction)toggleMapView:(id)sender;

@end

TrackerViewController.m

//
//  TrackerViewController.m
//  iTracker
//
//  Created by Victor Hudson on 9/22/12.
//  Copyright (c) 2012 Victor Hudson. All rights reserved.
//

#import "TrackerViewController.h"

@interface TrackerViewController ()

@end

@implementation TrackerViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    // navigation item
    [[self navigationItem] setTitle:@"iTracker"];

    MKUserTrackingBarButtonItem *trackingButton = [[MKUserTrackingBarButtonItem alloc] initWithMapView:self.worldView];
    [[self navigationItem] setRightBarButtonItem:trackingButton animated:YES];

    self.worldView.userTrackingMode = 1;
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (IBAction)toggleMapView:(id)sender {
    switch ([sender selectedSegmentIndex]) {
        case 0:
        {
            [self.worldView setMapType:MKMapTypeStandard];
        }break;
        case 1:
        {
            [self.worldView setMapType:MKMapTypeSatellite];
        }break;
        case 2:
        {
            [self.worldView setMapType:MKMapTypeHybrid];
        }break;
    }
}
@end

前に言ったように、すべてうまく機能しているように見えますが、あなたが非常に速く動いているときのヘディングモードでの追跡. 私は iPhone 4 で実行していますが、ARC を使用した場合と使用しない場合でアプリを試してみましたが、結果は同じでした。誰かが私が犯した間違いを指摘したり、プロジェクトをビルドしたい場合や、それがバグであることを確認できる場合は、感謝します。

ご協力ありがとうございます;-)

4

1 に答える 1

1

現在、ios5 から ios6 に移行したときのアプリでの同様の動作を調査しています。で説明されているように、シングルトンとして作成された locationmanager があります。

cllocationmanagerシングルトン

さらにマップビューでは、setusertrackingmode を使用しています。iOS6 では、MKUserTrackingModeFollowWithHeading から MKUserTrackingModeFollow に前後にジャンプします。iOS5 では、同一のコードで問題なく動作します。で指摘されているように、2 つの locationmanager が互いに競合している可能性があります。

2 つの locationmanager 間の競合

于 2012-09-30T20:46:45.050 に答える