1

私は、タッチされたときにMoreDetailViewControllerをスタックに持ってくる必要がある詳細開示インジケーターを備えたmapViewを持っています。現時点では、認識されないセレクターがインスタンスエラーに送信されてクラッシュします。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender開示インジケータープレスからこのメソッドを呼び出す方法を理解しようとしています。

開示インジケーター付きのマップアノテーションコードは次のとおりです。

- (MKAnnotationView *)mapView:(MKMapView *)map viewForAnnotation:(id <MKAnnotation>)annotation
{
    MKPinAnnotationView *mapPin = nil;
    if(annotation != map.userLocation) 
    {
        static NSString *defaultPinID = @"defaultPin";
        mapPin = (MKPinAnnotationView *)[map dequeueReusableAnnotationViewWithIdentifier:defaultPinID];
        if (mapPin == nil )
        {
            mapPin = [[MKPinAnnotationView alloc] initWithAnnotation:annotation 
                                                      reuseIdentifier:defaultPinID];
            mapPin.canShowCallout = YES;

            UIButton *disclosureButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
            [disclosureButton addTarget:self action:@selector(prepareForSegue:) forControlEvents:UIControlEventTouchUpInside];

            mapPin.rightCalloutAccessoryView = disclosureButton;

        }
        else
            mapPin.annotation = annotation;

    }
    return mapPin;
}

呼び出す必要のあるメソッドは次のとおりです。

// Do some customisation of our new view when a table item has been selected
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    // Make sure we're referring to the correct segue
    if ([[segue identifier] isEqualToString:@"ShowMoreInfo"]) {

        // Get reference to the destination view controller
        MoreDetailViewController *mdvc = [segue destinationViewController];


        [mdvc setSelectedItemName:[NSString stringWithFormat:@"%@", placeName.text]];
        [mdvc setSelectedItemAddress:[NSString stringWithFormat:@"%@", placeFormattedAddress.text]];

        [mdvc setSelectedItemWeb:[NSString stringWithFormat:@"%@", placeWebsite.text]];
        [mdvc setSelectedItemRating:[NSString stringWithFormat:@"%@", placeRating.text]];
  //      [mdvc setSelectedItemDistance:[NSString stringWithFormat:@"%@", placeDistance.text]];

    }
}
4

2 に答える 2

0

MoreDetailViewControllerそこには、コード内とエラー内の2種類の詳細ビューコントローラーがありDetailViewControllerます。それらを混同している可能性はありますか?

于 2012-04-30T12:52:40.967 に答える
0

prepareForSegue:とprepareForSegue:sender:は同じメソッドではありません。また、prepareForSegue:sender:メソッドのplaceNameとfriendsは不明です(またはivarです)。

prepareForSegue:sender:メソッドを根本的に変更し、次のように変更します

- (void)showMoreInfo:(id)sender{
        // Get reference to the destination view controller
        MoreDetailViewController *mdvc = [segue destinationViewController];

//define and set the placename and other variables

        [mdvc setSelectedItemName:[NSString stringWithFormat:@"%@", placeName.text]];
        [mdvc setSelectedItemAddress:[NSString stringWithFormat:@"%@", placeFormattedAddress.text]];

        [mdvc setSelectedItemWeb:[NSString stringWithFormat:@"%@", placeWebsite.text]];
        [mdvc setSelectedItemRating:[NSString stringWithFormat:@"%@", placeRating.text]];
  //      [mdvc setSelectedItemDistance:[NSString stringWithFormat:@"%@", placeDistance.text]];

    }
}

そして、同じように呼び出します。呼び出されるセレクターの名前を変更するだけです。

[disclosureButton addTarget:self action:@selector(showMoreInfo:) forControlEvents:UIControlEventTouchUpInside];

また、注釈やマップに興味がある場合は、単純なナビゲーション用のセグエを使用しないでください。

于 2012-04-30T16:26:51.417 に答える