Может ли кто-нибудь объяснить основы того, как можно поместить свойство в протокол, чтобы получить доступ к его значению для разных контроллеров представлений?Попытка поместить свойство в протокол
В частности,, я пытаюсь поместить свойство MKMapView в протокол. У меня есть два контроллера Вид:
- Карта View Controller (Внутри него 2. Таблица List View Controller)
- Таблица Список View Controller
Для того, чтобы иметь возможность выбрать сообщение в который соответствует аннотации в контроллере отображения карты, мне нужно иметь доступ к виду карты в контроллере отображения карты. Вот где я думал, что протоколы пригодится.
Карта View Controller .h
@protocol MapViewDelegate <MKMapViewDelegate>
@property (nonatomic, strong) IBOutlet MKMapView *mapView;
@end
@interface PAWWallViewController : UIViewController <MapViewDelegate, ...>
...
@end
Карта View Controller .h
...
@synthesize mapView = _mapView
...
Table View Controller .h
@interface PAWWallPostsTableViewController : PFQueryTableViewController <MapViewDelegate...>
...
Настольный контроллер. м
...
@synthesize mapView;
...
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// call super because we're a custom subclass.
[super tableView:tableView didSelectRowAtIndexPath:indexPath];
[tableView deselectRowAtIndexPath:indexPath animated:YES];
PFObject *object = [self.objects objectAtIndex:indexPath.row];
PAWPost *post = [[PAWPost alloc] initWithPFObject:object];
[mapView setCenterCoordinate: post.coordinate animated:YES];
[mapView selectAnnotation:post animated:YES];
NSLog(@"MAP VIEW: %@", mapView); // STILL NULL
}
Пожалуйста, укажите полный текст ошибки, которую вы видите. – bdesham
Протокол не делает свойство магически доступным, он просто упрощает ссылку, не используя другой include. Чтобы ссылаться на свойство, вам нужен указатель на объект, содержащий свойство. –
Я обновил его. После синтеза в обоих .m-файлах он теперь не отправляет ошибку. Но self.mapView возвращает null в журнале. Я добавил синтез, потому что я предупреждал, что синтез автоматического свойства не будет синтезировать свойство mapView. Прежде чем я добавил это, он отправил сообщение об ошибке: *** Завершение приложения из-за неотображенного исключения «NSUnknownKeyException», причина: «[ setValue: forUndefinedKey:]: этот класс не является ключевым значением, совместимым с кодировкой для ключевого mapView. ' *** –
teenyton