我正在使用MKMapView,我正试图让数据显示在屏幕上。为了做到这一点,我决定改成一个小的MapDataProvider,它会抛出一个MKAnnotation对象数组 - 每个对象包含一个随机纬度和经度值的坐标。
我已经确定我的MKMapView连接到我的控制器并且MKAnnotation对象数组正确来自我的MapDataProvider ...但出于某种原因..当我尝试在北美指定坐标时(例如.48,-84)..没有任何内容出现在MKMapView上。
在玩完之后我发现任何经度值小于0都会给我这个问题。
我已经尝试验证集合中每个MKAnnotation对象的坐标值,但CLLocation2DIsValue()一直返回false。
问题:
我可以为CLLocationCoordinate2D的纬度和经度输入什么范围的值,以便我的引脚出现在北美?
为了给出更多的上下文,这里是MapDataProvider中调用的方法:
+(NSArray *)getMockMapData {
NSMutableArray *tempMapData = [[NSMutableArray alloc] initWithCapacity:15];
for (int i=0; i< 15; i++) {
double latitude = rand()%20 +50;
double longitude = -107 + rand()%10;
CLLocationCoordinate2D coord = CLLocationCoordinate2DMake(latitude, longitude);
if(CLLocationCoordinate2DIsValid(coord) == NO)
continue;
[tempMapData addObject:[MockMapData
dataForValues:[@"Item " stringByAppendingString:[[NSNumber numberWithInt:i] description]]
subTitle:[@"Item " stringByAppendingString:[[NSNumber numberWithInt:i]description]]
coordinate:coord]];
}
return tempMapData;
}
答案 0 :(得分:3)
您的原始代码是:
double latitude = arcrandom()%20 +50;
double longitude = -107 + arcrandom()%10;
(实际上,您可能有arc4random
,而不是arcrandom
。)
arc4random
函数返回无符号整数值。
从该值中减去一个整数(-107
)会导致溢出,其值为4294967189
。那肯定是无效的经度。
不是切换到rand
(文档中说的是“坏的随机数生成器”),而是使用arc4random
(我认为是首选)并通过编写{{来强制进行浮点计算1}}代替-107.0
:
-107
一个不相关的观点是,如果double latitude = arc4random()%20 +50;
double longitude = -107.0 + arc4random()%10;
说CLLocationCoordinate2DIsValid
,那么您只是在执行NO
而不发回任何值(根据方法声明需要)。可以return
或return tempMapData;
。
答案 1 :(得分:0)
Canappi基于一种简单的编程语言mdsl,用于为iOS生成Objective-C代码。它们有一个地图控件,允许您从简单的描述符中获得所需的内容。如此示例所示,您可以使用静态推针位置或动态位置:
map venuMap (32,610,708,360) {
Standard ;
show user ;
area .1,.1;
//location 30.275806,-97.740128 ('TX Capital' , '1200 N Congress');
locationReference lat, long (sDetTitle, address);
}
生成的代码已打开,因此您只需将其复制并粘贴回应用即可。