Это может быть слишком поздно, и вы, вероятно, уже решили это, но вот решение, которое я протестировал и работает правильно.
Я говорю, что, как и другие реализации, которые я пробовал, результаты были примерно на 25 градусов ниже.
newLocation получается из CLLocationManagerDelegate, а latlngofAnn был выбранным MKAnnotation, который пользователь выбирает в моем приложении.
Просто замените данные lat и lon на значения в вашем массиве.
double lat2 = latlngOfAnn.coordinate.latitude * M_PI / 180.0;
double lon2 = latlngOfAnn.coordinate.longitude * M_PI / 180.0;
double lat1 = newLocation.coordinate.latitude * M_PI / 180.0;
double lon1 = newLocation.coordinate.longitude * M_PI / 180.0;
double dLon = lon2 - lon1;
double y = sin(dLon) * cos(lat2);
double x = cos(lat1) * sin(lat2) - sin(lat1) * cos(lat2) * cos(dLon);
double radiansBearing = atan2(y, x);
if(radiansBearing < 0.0)
radiansBearing += 2*M_PI;
double bearing = radiansBearing * 180.0 / M_PI;