Зависит от того, что это означает, что объект не найден.
, Если это - нормальное состояние дел, затем возвратите пустой указатель. Это - просто что-то, что могло бы произойти однажды в, в то время как, и вызывающие стороны должен проверить на него.
, Если это - ошибка, затем выдайте исключение, вызывающие стороны должны решить, что сделать с состоянием ошибки недостающего объекта.
В конечном счете любой работал бы, хотя большинство людей обычно считает его хорошей практикой, чтобы только использовать Исключения, когда что-то, ну, в общем, Исключительное произошло.
MKMapView не отвечает на методы сенсорного ввода, перечисленные выше ...
Попробуйте
[super touchEnded: касается withEvent: event];
вместо
[map touchesEnded: touch withEvent: event];
И примените эту идею ко всем методам событий касания. Таким образом, касания должны пройти вниз по цепочке респондентов, и мир будет восстановлен.
У меня была та же проблема - я хотел нарисовать масштабы карты поверх просмотра карты. Для этого мне пришлось перехватывать события касания, а затем отправлять их обратно в представление карты. К сожалению, когда MKMapView не является исходным приемником событий, некоторые плавные анимации панорамирования и масштабирования больше не работают.
Однако я нашел решение этой проблемы - немного хакерское, но работает: 1. Я поместил свой MapScales UIView поверх MKMapView и отключил в нем получение событий, чтобы базовый MKMapView получал события по умолчанию. 2. Я создал подкласс UIWindow с классом MyMainWindow, и в нем я переопределил метод:
- (void) sendEvent:(UIEvent*)event {
[super sendEvent:event];
[self send_the_event_also_to_my_MapScales_component_with_use_of_listener_design_pattern];
}
Таким образом, мой компонент MapScales получает и может реагировать на все события касания, и в то же время он не портит лежащий в основе MKMapView :)
В продолжение ответа @chomasek, чтобы обрабатывать только те касания для вида карты, я делаю следующее:
Вот код:
// this is in the view controller containing the map view
// kICTagForMapView is just a constant
_mapView.tag = kICTagForMapView;
Затем в sendEvent:
// this does into the UIWindow subclass
BOOL isMapView = NO;
UIView* superView = touch.view.superview;
while(superView)
{
//Debug(@"superView = %@", superView);
if (superView.tag == kICTagForMapView)
{
isMapView = YES;
break;
}
superView = superView.superview;
}
if (isMapView == NO) return;
// do stuff here