Xcode MKmapview-CLLocationCoordinate2D
我有一个数组NSMutableArray,其中保存了一个MKuserlocation类型-locationArray。 无论如何,现在我想从这个数组中获取数据,并将其从类型CLLocationCoordinate2D保存到一个数组中。 但是,既然我在locationArray中保存的所有内容都来自id类型,我如何从中获取坐标并将其保存到第二个数组Xcode MKmapview-CLLocationCoordinate2D,xcode,mkmapview,Xcode,Mkmapview,我有一个数组NSMutableArray,其中保存了一个MKuserlocation类型-locationArray。 无论如何,现在我想从这个数组中获取数据,并将其从类型CLLocationCoordinate2D保存到一个数组中。 但是,既然我在locationArray中保存的所有内容都来自id类型,我如何从中获取坐标并将其保存到第二个数组 CLLocationCoordinate2D* coordRec = malloc(pathLength * sizeof(CLLocationC
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中现在是合法的。它过去是堆栈上声明的数组的大小,必须是编译时常量。