Xcode MKmapview-CLLocationCoordinate2D

Xcode MKmapview-CLLocationCoordinate2D,xcode,mkmapview,Xcode,Mkmapview,我有一个数组NSMutableArray,其中保存了一个MKuserlocation类型-locationArray。 无论如何,现在我想从这个数组中获取数据,并将其从类型CLLocationCoordinate2D保存到一个数组中。 但是,既然我在locationArray中保存的所有内容都来自id类型,我如何从中获取坐标并将其保存到第二个数组 CLLocationCoordinate2D* coordRec = malloc(pathLength * sizeof(CLLocationC

我有一个数组NSMutableArray,其中保存了一个MKuserlocation类型-locationArray。 无论如何,现在我想从这个数组中获取数据,并将其从类型CLLocationCoordinate2D保存到一个数组中。 但是,既然我在locationArray中保存的所有内容都来自id类型,我如何从中获取坐标并将其保存到第二个数组

  CLLocationCoordinate2D* coordRec = malloc(pathLength * sizeof(CLLocationCoordinate2D));
    for(id object in locationArray){
        for (int i = 0; i < pathLength; i++)
            ?????
CLLocationCoordinate2D*coordRec=malloc(路径长度*sizeof(CLLocationCoordinate2D));
for(locationArray中的id对象){
for(int i=0;i<路径长度;i++)
?????
我不知道这是否可能


感谢典型的解决方案是创建一个
NSObject
子类,并定义一个属性
CLLOcationCoordinate2D
。实例化这些对象并将其添加到数组中

@interface Coordinate : NSObject

@property (nonatomic) CLLocationCoordinate2D coordinate;

- (id)initWithCoordinate:(CLLocationCoordinate2D)coordinate;

@end

@implementation Coordinate

- (id)initWithCoordinate:(CLLocationCoordinate2D)coordinate
{
    self = [super init];
    if (self) {
        _coordinate = coordinate;
    }
    return self;
}

@end
然后,由于您的
locationArray
MKUserLocation
的数组(其本身符合
MKAnnotation
),您可以执行以下操作:

NSMutableArray *path;

path = [NSMutableArray array];
for (id<MKAnnotation> annotation in locationArray)
{
    // determine latitude and longitude

    [path addObject:[[Coordinate alloc] initWithCoordinate:annotation.coordinate]];
}

这取决于它的用途。但是如果您可以使用前面的构造之一来避免
malloc
free
,这可能是理想的。这些技术利用Objective-C模式,使泄漏更难,使用无效指针等。

典型的解决方案是创建
NSObject
子对象类并定义单个属性,即
CLLOcationCoordinate2D
。实例化这些对象并将其添加到数组中

@interface Coordinate : NSObject

@property (nonatomic) CLLocationCoordinate2D coordinate;

- (id)initWithCoordinate:(CLLocationCoordinate2D)coordinate;

@end

@implementation Coordinate

- (id)initWithCoordinate:(CLLocationCoordinate2D)coordinate
{
    self = [super init];
    if (self) {
        _coordinate = coordinate;
    }
    return self;
}

@end
然后,由于您的
locationArray
MKUserLocation
的数组(其本身符合
MKAnnotation
),您可以执行以下操作:

NSMutableArray *path;

path = [NSMutableArray array];
for (id<MKAnnotation> annotation in locationArray)
{
    // determine latitude and longitude

    [path addObject:[[Coordinate alloc] initWithCoordinate:annotation.coordinate]];
}
这取决于它的用途。但是如果您可以使用前面的构造之一来避免
malloc
free
,这可能是理想的。这些技术利用Objective-C模式,使泄漏更难,使用无效指针,等等。

参考

您当然应该使用
CLLocationCoordinate2DMake
函数 使用来自
MKUserLocation
的数据或直接从
MKUserLocation
提取信息:

object.location.coordinate // it's a CLLocationCoordinate2D from your 'object' example

希望对您有所帮助。

参考

您当然应该使用
CLLocationCoordinate2DMake
函数 使用来自
MKUserLocation
的数据或直接从
MKUserLocation
提取信息:

object.location.coordinate // it's a CLLocationCoordinate2D from your 'object' example


希望能有所帮助。

为什么需要c样式的CLLocationCoordinated2D对象数组

给你:

NSArray* userLocations; // contains your MKUserLocation objects...

CLLocationCoordinate2D* coordinates = malloc( userLocations.count * sizeof( CLLocationCoordinate2D) );

for ( int i = 0 ; i < userLocations.count ; i++ )
{
    coordinates[i] = [[[userLocations objectAtIndex: i] location] coordinate];
}
NSArray*userLocations;//包含MKUserLocation对象。。。
CLLocationCoordinate2D*坐标=malloc(userLocations.count*sizeof(CLLocationCoordinate2D));
对于(int i=0;i
为什么需要CLLocationCoordinated2D对象的c样式数组

给你:

NSArray* userLocations; // contains your MKUserLocation objects...

CLLocationCoordinate2D* coordinates = malloc( userLocations.count * sizeof( CLLocationCoordinate2D) );

for ( int i = 0 ; i < userLocations.count ; i++ )
{
    coordinates[i] = [[[userLocations objectAtIndex: i] location] coordinate];
}
NSArray*userLocations;//包含MKUserLocation对象。。。
CLLocationCoordinate2D*坐标=malloc(userLocations.count*sizeof(CLLocationCoordinate2D));
对于(int i=0;i
这个
coordRec
数组的目的是什么?对于
MKPolyline
?这个
coordRec
数组的目的是什么?对于
MKPolyline
?他可能需要一个
MKPolyline
数组,它神秘地采用了c样式的数组,而不是
NSArray
。将
坐标定义为会更好吗de>CLLocationCoordinate2D坐标[userLocations.count];
,这可以实现同样的功能,但您不必担心忘记/不匹配的
free()
?显然,如果使用ivar,您必须使用
malloc
方法,但是如果使用本地数组,c型数组可能会更安全。@Rob-我没有意识到这在c中现在是合法的。它过去是堆栈上声明的数组的大小,必须是编译时常量。他可能需要
MKPolyLine
,它神秘地采用了c型数组,不是
NSArray
。将
坐标定义为
CLLocationCoordinate2D坐标[userLocations.count];
,这可以实现同样的功能,但您不必担心忘记/不匹配
free()
?显然,如果使用ivar,您必须使用
malloc
方法,但是如果使用本地数组,c样式的数组可能会更安全。@Rob-我不知道这在c中现在是合法的。它过去是堆栈上声明的数组的大小,必须是编译时常量。