dpa*_*ajr 6 iphone objective-c mkmapview ios ios5
我目前正在使用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;
}
Run Code Online (Sandbox Code Playgroud)
小智 3
你原来的代码是这样的:
double latitude = arcrandom()%20 +50;
double longitude = -107 + arcrandom()%10;
Run Code Online (Sandbox Code Playgroud)
(事实上,你可能有arc4random,没有arcrandom。)
该arc4random函数返回一个无符号整数值。
从该值中减去整数 ( -107) 会导致溢出,从而给出类似 的值4294967189。这肯定是一个无效的经度。
不要切换到rand(文档称这是一个“错误的随机数生成器”),而是使用(我认为这是首选)并通过编写而不是arc4random强制进行浮点计算:-107.0-107
double latitude = arc4random()%20 +50;
double longitude = -107.0 + arc4random()%10;
Run Code Online (Sandbox Code Playgroud)
一个不相关的一点是, if CLLocationCoordinate2DIsValidsaid NO,您只是在执行 areturn而不发送回任何值(您需要根据方法声明发送回任何值)。要么做,return tempMapData;要么continue;。
| 归档时间: |
|
| 查看次数: |
1745 次 |
| 最近记录: |