Для начала я бы создал класс Person
(подкласс NSObject
), который также реализует протокол MKAnnotation
.Вы можете создать два отдельных класса ("Person" и "PersonAnnotation"), если хотите, но в этом нет необходимости.
В классе Person
вы можете объявить свои собственные свойства, связанные с личностью, такие как FirstИмя, фамилия, адрес электронной почты и т. Д., Или вы можете просто иметь ABRecordRef
ivar и позволить ему хранить отдельные поля для вас.
Я бы создал запись ABPerson
только тогда, когда я хочу на самом делепокажите ABPersonViewController
, чтобы сохранить код, специфичный для AB, и упростить управление созданием и выпуском записи ABPerson
.В любом случае, просто создание ABRecordRef
не добавит его в адресную книгу.Как сказано в справочной документации ABPerson :
Записи о персонале не обязательно должны храниться в базе данных адресной книги.Вы можете использовать персональные записи как способ группировки контактной информации в памяти и представления ее пользователю, например, через контроллер персонального просмотра (ABPersonViewController).
Чтобы класс Person
мог выглядетькак это:
@interface Person : NSObject<MKAnnotation>
@property (nonatomic, copy) NSString *firstName;
@property (nonatomic, copy) NSString *lastName;
@property (nonatomic, copy) NSString *emailAddress;
@property (nonatomic, assign) CLLocationCoordinate2D coordinate;
@end
@implementation Person
@synthesize firstName;
@synthesize lastName;
@synthesize emailAddress;
@synthesize coordinate;
-(NSString *)title
{
return [NSString stringWithFormat:@"%@ %@", firstName, lastName];
}
-(NSString *)subtitle
{
return emailAddress;
}
@end
Класс веб-сервиса создаст экземпляр Person
и установит свойства.Затем класс представления карты добавит этот экземпляр непосредственно на карту (поскольку Person уже реализует MKAnnotation):
[mapView addAnnotation:person];
При касании булавки представление карты вызовет метод делегата didSelectAnnotationView
.Или вы можете добавить кнопку раскрытия к сноске аннотации в viewForAnnotation
и ответить на нее в методе делегата calloutAccessoryControlTapped
.
Какой бы метод действия вы ни решили использовать, в этом методе вы могли бы затем создатьABRecordRef
, установите его значения из объекта аннотации, а затем покажите ABPersonViewController
.В обоих методах делегата объект аннотации Person
можно получить с помощью:
Person *personTapped = (Person *)view.annotation;