2

iPhone GPS の「ランキーパー」タイプのアプリで少し問題が発生しています。ほとんどすべての点で、アプリは問題なく動作します。私が設計した方法は、CLLocation オブジェクトを配列に追加し、そのオブジェクトの配列を MySQL データベースに格納することです。次に、マップビューを開くと、サーバーから配列を取得し、少し操作して、データを使用してマップにピンを追加します。

私が言うように、これはすべて正常に機能しており、私の机に座っているときにシミュレーターとデバイスで美しくうまく機能します (そして、楽器を使用して - 漏れはありません)。ただし、デバイスでアプリをテストし、実際に家を出て通りを15分歩いたところ、CLLocationManagerオブジェクトの更新が停止し、配列がMySQLにPOSTされた時点でアプリがクラッシュしました-ほぼ確実に(私は思う)メモリの問題のため。

そういうわけで、私は比較的初心者なので、優しくしてください。オブジェクトを配列に格納するより効率的な方法を開発することについてアドバイスを探しています。アプリを溶かします。

私が使用しているコードの(選択)は次のとおりです。

- (void)locationManager:(CLLocationManager *)manager
    didUpdateToLocation:(CLLocation *)newLocation
           fromLocation:(CLLocation *)oldLocation {

// CLocation オブジェクトが有効かどうかを判断するコードと、他にも 1 つまたは 2 つの小さなことを取り出していることに注意してください。

    if (recording == YES) {//the start button has been pressed but the stop button hasn't.


        if (alreadyBeenRound == NO) {

            if (firstRecord == YES) {

                //create the pointsonRoute array
                if (pointsOnRouteExists == NO) {

                    pointsOnRoute = [[NSMutableArray alloc] init];
                    pointsOnRouteExists = YES;
                }

                [pointsOnRoute removeAllObjects];

                firstRecord = NO; //after setting first record, can move on

            }

            [pointsOnRoute addObject:newLocation];

                            //more stuff taken out here

            alreadyBeenRound = YES;

        } else { 

            [pointsOnRoute addObject:newLocation];


        }

//I do release the array
4

2 に答える 2

0

主要な更新のみを保存する必要があります。たとえば、最初の 1 キロメートルは 5 メートルごとに (ユーザーが短い散歩に出かけた場合)、ランニングに行った場合は 20 ~ 50 メートルごとに保存するとします。配列/CoreDataが大幅に増加し始める場合、バックグラウンドスレッドで同じ方向にいくつかの近い値または値をトリミングすることもできます。

于 2015-07-03T12:40:04.040 に答える
0

勝手な推測です。デスクに座っていると、場所が変更されないため (場所マネージャーの設定方法によって異なります)、しばらくすると更新が停止します。そのため、配列にそれほど多くのポイントはありません。移動すると大量に発生する可能性があります。デスクにいるときに、アレイに挿入されているインサートの数と、移動中のインサートの数を確認できます...

于 2011-01-09T19:57:35.917 に答える