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

问题可能是有一些后续代码(例如,试图计算标注气泡大小的代码)试图获取字符串的长度,但由于您存储了 a NSNull,它正在尝试调用该length方法它失败了。

您可以通过多种方式解决此问题,例如:

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