NSNotifications
есть словарь с ними, называемый userInfo
, куда вы можете поместить информацию, которую хотите отправить, с уведомлением.
Я собираюсь исправить ваш код вроде как в обратном направлении ... так что простосо мной.Вы действительно не использовали класс NSNotification, как он обычно (или предназначен).
Чтобы исправить эту ситуацию, мы должны сделать несколько вещей.Значение object
сообщения NSNotification
- это объект, который публикует NSNotification
, а не объект, который вы хотите передать с ним.
Добавьте объект CLLocation
в словарь и передайтеэто как userInfo
словарь.Также нет никаких причин для этого пользовательского класса уведомлений.Таким образом, вы можете избавиться от Notification.h
и Notification.m
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
NSString *const kLocationChanged = @"NewLocation";
NSDictionary *locationDict = [NSDictionary dictionaryWithObject:newLocation forKey:@"Location"];
[[NSNotificationCenter defaultCenter] postNotificationName:kLocationChanged object:nil userInfo:locationDict];
}
Итак, теперь мы публикуем информацию о местоположении с уведомлением.Затем обработайте его, когда получите уведомление.
- (void)locationUpdate:(NSNotification *)notification {
CLLocation *location = [[notification userInfo] valueForKey:@"Location"];
NSLog(@"latitude = %f, longitude = %f",location.coordinate.latitude, location.coordinate.longitude);
}
Кроме того, измените заголовок контроллера представления следующим образом:
@interface ViewController : UIViewController <UITableViewDelegate, UITableViewDataSource, LocationDelegateProtocol> {
...
}
...
- (void)locationUpdate:(NSNotification *)notif;
@end