1

trucksArray我在 viewDidLoad 中声明的数组收到未使用的变量警告。我不明白为什么,因为我在viewController.m.

我对目标 c 非常陌生,所以如果这是一个非常简单的问题,我提前道歉。

以下是方法:

- (void)viewDidLoad
{
    [super viewDidLoad];

    TruckLocation *a1 = [[TruckLocation alloc] initWithName:@"test truck 1" address:@"41 Truck Avenue, Provo, Utah" coordinate:CLLocationCoordinate2DMake(40.300828, 111.663802)];

    TruckLocation *a2 = [[TruckLocation alloc] initWithName:@"test truck 2" address:@"6 Truck street, Provo, Utah" coordinate:CLLocationCoordinate2DMake(40.300826, 111.663801)];

    NSMutableArray* trucksArray =[NSMutableArray arrayWithObjects: a1, a2, nil];
}

以及我使用数组的方法:

- (void)plotTruckPositions:(NSData *)responseData {
    for (id<MKAnnotation> annotation in _mapView.annotations) {
        [_mapView removeAnnotation:annotation];
    }

    NSDictionary *root = [NSJSONSerialization JSONObjectWithData:responseData options:0 error:nil];
    NSMutableArray *trucksArray = [root objectForKey:@"trucksArray"];

    for (NSArray *row in trucksArray) {
        NSNumber * latitude = [row objectAtIndex:1];
        NSNumber * longitude = [row objectAtIndex:2];
        NSString * truckDescription = [row objectAtIndex:2];
        NSString * address = [row objectAtIndex:3];

        CLLocationCoordinate2D coordinate;
        coordinate.latitude = latitude.doubleValue;
        coordinate.longitude = longitude.doubleValue;
        TruckLocation *annotation = [[TruckLocation alloc] initWithName:truckDescription address:address coordinate:coordinate] ;
        [_mapView addAnnotation:annotation];
    }
}
4

3 回答 3

2

在 viewDidLoad 中,您正在创建一个 NSMutableArray 实例,该实例在 viewDidLoad 方法结束后被释放。在第二种方法中,您创建了一个完全不同的 NSMutableArray。如果您打算在某处创建它并在其他地方使用它,则应该创建一个实例变量或属性以保留对该 NSMutableArray 的引用。

@property (nonatomic) NSMutableArray *trucksArray;
于 2013-09-05T02:56:16.987 回答
1

您正在使用两个完全不同的数组,它们都恰好被调用trucksArray

在您的 viewDidLoad 方法中,您创建的数组没有存储在任何地方,因此它超出了范围并在方法返回后被释放。你的意思是把它分配给一个实例变量吗?

于 2013-09-05T02:56:10.407 回答
0

如果您将变量声明为标题内的全局变量(带有大括号),您只需分配它们,无需重新声明它们只需分配它们(等号),即省略前面的“TruckLocation *”。

于 2013-11-29T21:09:36.377 回答