質問

[OK]をので、私はこの問題を抱えています。私は何をしたいマップに複数の注釈を追加し、手動です。私はちょうど1つの注釈を追加すると、それが完璧に動作します。ピンが低下し、あなたがそのコールアウトを見るためにそれをクリックすることができ、人生は良いです。

私は1つ以上のものを追加したい場合は、

問題が来ます。私は2番目を追加すると、突然、ピンの(つまり、彼らは、特定の色である必要があり、その大きさに応じて、彼らは今も同じだ...)が正しく色付けされていない、そしてもっと重要なのはあなたがそれらをクリックすると、自分のを見てコールアウトは、アプリがexex_bad_accessでクラッシュ。私は本当に多分私はマップにあまりにも多くのビューを追加している、間違って何見当がつかない?しかし、それは唯一の9ピンだとピン自体はうまく追加します。 ここに私のコードです...

    - (void)viewDidLoad {
    [super viewDidLoad];
    NSMutableArray *stops = [[NSMutableArray alloc] init];  //Get list of all the stops available
    Bus *bus1 = [[Bus alloc] init];                         // Bus 1 holds the stops
    stops = [bus1 returnStops];
    for (NSString *stop in stops)                           //Go through each stop to add annotation to map
    {
        Bus *bus2 = [bus1 initWithStop:stop];                //Create an instance of bus with a given stop
        MapAnnotation *eqAnn = [MapAnnotation annotationWithBus:bus2]; 
        [self.mapView addAnnotation:eqAnn];                    //Add the annotation to the map
        //[eqAnn release];
        //[bus2 release];
    }
    [self recenterMap];
    [stops release];

}
- (MKAnnotationView *)mapView:(MKMapView *)mapView 
            viewForAnnotation:(id <MKAnnotation>)annotation {
    MKAnnotationView *view = nil;
    if(annotation != mapView.userLocation) {
        MapAnnotation *eqAnn = (MapAnnotation*)annotation;
        view = [self.mapView dequeueReusableAnnotationViewWithIdentifier:@"busLoc"];
        if(nil == view) {
            view = [[[MKPinAnnotationView alloc] initWithAnnotation:eqAnn
                                                    reuseIdentifier:@"busLoc"] autorelease];
        }
        CGFloat magnituide = [eqAnn.bus.magnitude floatValue];

        if(magnituide >= .80f) {
            [(MKPinAnnotationView *)view setPinColor:MKPinAnnotationColorRed];
        } else if(magnituide >= .60f) {
            [(MKPinAnnotationView *)view setPinColor:MKPinAnnotationColorPurple];
        } else 
        {
            [(MKPinAnnotationView *)view setPinColor:MKPinAnnotationColorGreen];
        }
        [(MKPinAnnotationView *)view setAnimatesDrop:YES];
        [view setCanShowCallout:YES];
    } 

    return view;
}

でも、第2の機能を削除しようとしたが、それは何もしませんでした。

助けてくれてありがとう! 私も

...あなたは注釈をクリックすると、作品9の内の1本の又は2つのピンが通常あります、追加する必要がありますP.S

私もプログラムで手でに手動でちょうど2つのアノテーション(すなわち、ループを削除)しようとすると、それはまだ失敗し、色がまだ間違っている...

役に立ちましたか?

解決 4

SOの答えは、それは混乱しましたので、私は、初期化オブジェクトをBUS1送信保たれていることだった。

「こんにちはデビッド、

あなたのデータモデルは、私にはまずい見えます。あなただけが繰り返しinitWithStopを送信している1つのバスオブジェクトがあります。にする

この情報がお役に立てば幸いです。

幸運! 「

は、あなたの助けをみんなありがとう!あなたのすべては私にかなり助けた!

他のヒント

stops変数のあなたのメモリ管理が間違っているように思われます。あなたは可変配列を割り当て、その後、そのリリースを、-[Bus returnStops]の戻り値とその配列を置き換えます。また、それはbus2で何が起こっているかは明らかではありません - -[Bus initWithStop:]の異なるのインスタンスを返すBusていますか?これは、すでに初期化オブジェクト上の任意のメソッド-init*を送信するために、通常ではありません。私はあなたがおそらくココアタッチでのメモリ管理規則で混乱していると思います。ここではココアのメモリ管理上の記事および他の参考文献の収集ですの(これは同じ獣である)。

あなたはAddAnnotationsを使用しての代わりに注釈を追加しようとしたことがありますか? - (無効)addAnnotations:(NSArrayの*)の注釈。これは...あなたのために働くが、(チSはあなたの問題の原因ではないかもしれませんが、それは可能性がありますが)あなたのviewDidLoadで、いくつかのメモリ管理の問題を抱えている検査以上、さらに答えを見て可能性があります。まず、あなたは、配列(停止)を割り当て、その後、バスオブジェクト内の一部の配列とそれをovveridingているのは、これは漏れの原因となります。また、あなたは、あなたがそれに参照カウントが増加したithout wはバスオブジェクトに実際にある配列を解放しているので、クラッシュを引き起こしている可能性があり、その配列を解放しています。私はinitWithStopが何をしているのかわからないけどinitWithStopは、オブジェクトを保持している場合、あなたはあまりにもここにリークを取得される可能性があります。

私は、メモリ管理の問題呼び出すことはありません - 私はあなたが間違って配列参照を使用しているだけだと思います。

。 NSMutableArrayの*を持つ配列を構築する= [[NSMutableArrayののalloc]のinit]を停止した後、

、次のステップは使用することです[のaddObjectを停止します]それぞれが保存したい停止追加する

この後?それはあなたが本当にやろうとしているかは明らかではありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top