1

注釈の配列を使用してテーブル ビューにデータを入力しようとしていますが、このコードを追加するたびに XCode がブレークポイントを提供するようです。

if (cell == nil)
    {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}

NSMutableArray *annotations = [[NSMutableArray alloc] init];

if(indexPath.section == 0)
{
    for(Location *annotation in [(MKMapView *)self annotations])
    {
        if(![annotation isKindOfClass:[MKUserLocation class]])
        {
    }
    }
    cell.textLabel.text = [[annotations objectAtIndex:indexPath.row] title];
}
return cell;

私の注釈:

CLLocationCoordinate2D thecoordinate59;

thecoordinate59.latitude = 51.520504;
thecoordinate59.longitude = -0.106725; 
Location *ann1 = [[Location alloc] init];
ann1.title =@"Antwerp";
ann1.coordinate = thecoordinate1;

NSMutableArray *annotations = [NSMutableArray arraywithObjects: ann.. ann59, nil];

[map addAnnotations:annotations];
4

2 に答える 2

2

で、作成している配列とは関係のないcellForRowAtIndexPathという名前の新しいローカル変数を宣言しています(ここでアノテーションを追加していると思います)。annotationsannotationsviewDidLoad

次にcellForRowAtIndexPath、この行:

for(Location *annotation in [(MKMapView *)self annotations])

annotationsにプロパティがないため、失敗しますself。でviewDidLoad、という名前のローカル変数を宣言しましたannotationsが、そのメソッドの外部では表示またはアクセスできません。

上記の行のもう1つの問題は、としてキャストselfしていることですMKMapView *。ほとんどの場合selfUIViewControllerです。マップビューが含まれていますが、それ自体はマップビューではありません。


annotationsすべてのメソッドで使用できるように、 最初に詳細ビューのクラスレベルで配列を宣言する必要があります。詳細ビューの.hファイル:

@property (nonatomic, retain) NSMutableArray *annotations;

ちなみに、マップビュー自体のannotationsプロパティと混同しないように、別の名前を付けます。

.mで、それを合成します。

@synthesize annotations;

viewDidLoad、次のように作成します。

self.annotations = [NSMutableArray arraywithObjects...
[map addAnnotations:self.annotations];

このnumberOfRowsInSectionメソッドで、配列のカウントを返します。

return self.annotations.count;

次にcellForRowAtIndexPath

if (cell == nil)
    {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}

if(indexPath.section == 0)
{
    cell.textLabel.text = [[self.annotations objectAtIndex:indexPath.row] title];
}
return cell;
于 2012-08-16T13:55:36.903 に答える
0

あなたはその行でクラッシュを報告しています(私は推測します)

私が見る問題はクラッシュの理由です

cell.textLabel.text = [[annotations objectAtIndex:indexPath.row] title];

annotations配列はローカルで初期化されるだけで、値を保持しない上記のいくつかのステートメント..??

于 2012-08-16T12:36:42.183 に答える