0

私はMKMapViewに慣れようとしてかなり長い間いじっていましたが、問題が発生しました。

MapViewに2つのピンが設定されており、それらを押すと、それぞれに注釈が付けられます。また、配列からのデータがロードされるUlLabelsを備えた新しいUIViewに移動するボタンもあります。

コンソールを見ると、データが通過していることがわかりますが、ピンだけではなく、すべてをロードして最後の1つを表示することを選択しました。

次のビューのデータをロードするために使用しているメソッドのコードは次のとおりです。

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view{

   MKPinAnnotationView *annView=[[MKPinAnnotationView alloc] initWithAnnotation:addAnnotation     reuseIdentifier:@"currentloc"];
    if(annView.tag = 0) {
            GSStore * theStore = [globalCMS getStoreById:1];
            NSUserDefaults * prefs = [NSUserDefaults standardUserDefaults];
            int storeid = theStore.storeid;
            [prefs setInteger:storeid forKey:@"selectedstore"];

            NSLog(@"%@", theStore.name);

            storeName.text = [NSString stringWithFormat:@"%@", theStore.name];
            storeCS.text = [NSString stringWithFormat:@"%@,%@", theStore.city, theStore.state];
            storeHours.text = [NSString stringWithFormat:@"%@", theStore.hours];
            storePhone.text = [NSString stringWithFormat:@"%@", theStore.phone];
            storeAddress.text = [NSString stringWithFormat:@"%@", theStore.address];
            storeCSZ.text = [NSString stringWithFormat:@"%@,%@ %@", theStore.city, theStore.state, theStore.zip];
            storeWebsite.text = [NSString stringWithFormat:@"%@", theStore.website];
            }
    if(annView.tag = 1){
            GSStore * theStore = [globalCMS getStoreById:2];
            NSUserDefaults * prefs = [NSUserDefaults standardUserDefaults];
            int storeid = theStore.storeid;
            [prefs setInteger:storeid forKey:@"selectedstore"];

            NSLog(@"%@", theStore.name);

            storeName.text = [NSString stringWithFormat:@"%@", theStore.name];
            storeCS.text = [NSString stringWithFormat:@"%@,%@", theStore.city, theStore.state];
            storeHours.text = [NSString stringWithFormat:@"%@", theStore.hours];
            storePhone.text = [NSString stringWithFormat:@"%@", theStore.phone];
            storeAddress.text = [NSString stringWithFormat:@"%@", theStore.address];
            storeCSZ.text = [NSString stringWithFormat:@"%@,%@ %@", theStore.city, theStore.state, theStore.zip];
            storeWebsite.text = [NSString stringWithFormat:@"%@", theStore.website];  
            }

    if (annView.tag = 2) {
            GSStore * theStore = [globalCMS getStoreById:3];
            NSUserDefaults * prefs = [NSUserDefaults standardUserDefaults];
            int storeid = theStore.storeid;
            [prefs setInteger:storeid forKey:@"selectedstore"];

            NSLog(@"%@", theStore.name);

            storeName.text = [NSString stringWithFormat:@"%@", theStore.name];
            storeCS.text = [NSString stringWithFormat:@"%@,%@", theStore.city, theStore.state];
            storeHours.text = [NSString stringWithFormat:@"%@", theStore.hours];
            storePhone.text = [NSString stringWithFormat:@"%@", theStore.phone];
            storeAddress.text = [NSString stringWithFormat:@"%@", theStore.address];
            storeCSZ.text = [NSString stringWithFormat:@"%@,%@ %@", theStore.city, theStore.state, theStore.zip];
            storeWebsite.text = [NSString stringWithFormat:@"%@", theStore.website];  
            }

}
4

1 に答える 1

1

「すべてのデータをロードするメソッド」が表示される理由を説明するだけです。

条件は、二重()の代わりにif単一の等号()を使用しています。 シングルは割り当てであり、ダブルは同等性をチェックするためのものです。===
===

割り当てはすべてのsで正常に実行されるため、すべてのifs内のコードがif実行されます。


ただし、実際の問題は、didSelectAnnotationViewデリゲートメソッドでアノテーションビューの新しいインスタンスを作成していることです。これは、必要なものではありません。

新しいインスタンスを作成する代わりに、メソッドがパラメーターとして提供しているアノテーションビューインスタンスを使用できます(つまり、view)。

したがって、理論的にはを見ることができますview.tag

ただし、タグに依存せず、代わりにアノテーションに必要なすべてのデータをアノテーションクラス自体に配置することを強くお勧めします。次に、このメソッドのアノテーションにアクセスview.annotationし、カスタムクラスにキャストして、カスタムプロパティにアクセスできます。

MyAnnotationClass *myAnn = (MyAnnotationClass *)view.annotation;
NSLog(@"myAnn.someCustomProperty = %@", myAnn.someCustomProperty);
于 2012-08-14T00:43:48.677 に答える