2
for (int i = 0; i< [delarsInfoArray count] ; i++)
{
    NSString *lattitudeValue;
    NSString *longitudeValue;
    if ([[delarsInfoArray objectAtIndex:i]count]>1) {
        lattitudeValue = [[[delarsInfoArray objectAtIndex:i]valueForKey:@"LATITUDE"]objectAtIndex:1];
        longitudeValue = [[[delarsInfoArray objectAtIndex:i]valueForKey:@"LONGITUDE"]objectAtIndex:0];
    }
    else
    {
        lattitudeValue = @"";
        longitudeValue = @"";
    }
    CLLocationCoordinate2D pinLocation;
    if(([lattitudeValue floatValue] != 0) && ([longitudeValue floatValue] != 0) ) {
        mapRegion.center.latitude = [lattitudeValue floatValue];
        mapRegion.center.longitude = [longitudeValue floatValue];
        if(pinLocation.latitude !=0 && pinLocation.longitude !=0) {
            myAnnotation1 = [[MyAnnotation alloc] init];
            if ([[delarsInfoArray objectAtIndex:i] count] == 0) {

                myAnnotation1.title  = @"";
                myAnnotation1.subtitle = @"";
            }
            else
            {
                // NSLog(@"====== delears array is===%@",delarsInfoArray);
                NSLog(@"===== delears array count is %d",[delarsInfoArray count]);

                if ([[[delarsInfoArray objectAtIndex:i]valueForKey:@"Address"]objectAtIndex:2] !=nil)
                {
                    myAnnotation1.title = [[[delarsInfoArray objectAtIndex:i]valueForKey:@"Address"]objectAtIndex:2];
                }
                if ([[[delarsInfoArray objectAtIndex:i]valueForKey:@"City"]objectAtIndex:3]!= nil) {
                    myAnnotation1.subtitle = [[[delarsInfoArray objectAtIndex:i]valueForKey:@"City"]objectAtIndex:3];
                }

                NSLog(@"%@",[[[delarsInfoArray objectAtIndex:i]valueForKey:@"City"]objectAtIndex:3]);
            }

            [dealerMapView setRegion:mapRegion animated:YES];
            [dealerMapView addAnnotation:myAnnotation1];
            myAnnotation1.coordinate = mapRegion.center;
            [myAnnotation1 release];
        }
    }
}

上記のコードはviewWillAppearに書かれています。マップをビューにロードした後、マップをクリックするとアプリがクラッシュします。このクラッシュを解決するにはどうすればよいですか?

4

1 に答える 1

2

ここには多くの問題がありますが、リストの一番上に飛び出しているのは次の行です。

if ([[[delarsInfoArray objectAtIndex:i]valueForKey:@"Address"]objectAtIndex:2] !=nil)
    ...

if ([[[delarsInfoArray objectAtIndex:i]valueForKey:@"City"]objectAtIndex:3]!= nil) {
    ...

問題は、配列objectAtIndexの aが決してにならないことです。aを配列に格納することはできないため、値が見つからない場合は、オブジェクト. これは、値が見つからなかったことを示しますが、 (配列に追加できない)の代わりに(配列に追加できる) を使用します。valueForKeynilnilvalueForKeyNSNull[NSNull null]NSNullnil

問題は、文字列の長さを取得しようとするいくつかの後続のコード (たとえば、吹き出しバブルのサイズを把握しようとするコード) がある可能性がありますが、 を保存したため、メソッドNSNullを呼び出そうとしていますlengthそしてそれは失敗しています。

これは、次のようなさまざまな方法で修正できます。

if ([[[delarsInfoArray objectAtIndex:i]valueForKey:@"Address"]objectAtIndex:2] != [NSNull null])
    ...
于 2013-03-23T13:11:58.197 に答える