Чтобы опираться на объяснение Анны К., обычно рекомендуется проверять действительность CLLocationCoordinate2DIsValid (YOURLOCATION).
Если вы получаете латы и лоты из веб-службы или базы данных SQLite, вам следует проверитьи убедитесь, что местоположение действительно, прежде чем пытаться добавить аннотацию на карту.Вот пример этого в действии:
for (int i = 0; i < [yourArray count]; i++) {
YourOBJ *obj = [yourArray objectAtIndex:i];
yourCLLocation2D.latitude = obj.latitude;
yourCLLocation2D.longitude = obj.longitude;
AnnotationPin *anno = [[AnnotationPin alloc] initWithCoordinate: yourCLLocation2D];
if (CLLocationCoordinate2DIsValid(yourCLLocation2D))
{
anno.lat = obj.latitude;//Maybe you want to store lat
anno.lon = obj.longitude;//and lon
anno.title = obj.name//define the title
anno.subtitle = obj.info//and subtitle for your annotation callout
anno.yourLocation = yourCLLocation2D;//Some of these aren't necessary
anno.tag = i;//but can really help to define and track pins
[map addAnnotation:anno];
}
[anno release];
}
Для всех тех, у кого возникли проблемы, когда вы успешно добавляете связку булавок на карту и с тем же кодом пытаетесь добавить другой набор булавок, кромеприложение вылетает, попробуйте это как можно скорее.Для тех, кто имеет подобную ситуацию в этом примере, но не столкнулся с какими-либо проблемами, сделайте это в любом случае!Ваши пользователи могут добавить неправильный лат / лон комбо и вывести приложение из строя, если вы предоставите им эту функцию.
Помните, что (0,0) является допустимой координатой, поэтому не беспокойтесь об этой логике, удаляя ее, еслиВы обеспокоены этим.Это для тех (-200,75) координат типа, которые физически не существуют на планете Земля.