Что я хотел бы сделать, чтобы создать класс Person
(подкласс NSObject
), который также реализует протокол MKAnnotation
. Вы можете создать два отдельных класса («Person» и «PersonAnnotation»), если хотите, но это необязательно.
В Person
классе, вы можете либо объявить свои собственные персоны, связанные с такими свойствами, как Имя, Фамилия, адрес электронной почты и т.д., или вы могли бы просто иметь ABRecordRef
Ивар и пусть хранят отдельные поля для вас.
Я хотел бы только создать ABPerson
запись, когда я хочу на самом деле показать ABPersonViewController
сохранить AB-специфический код выделен и управлять созданием в ABPerson
RECORD и выпустить более легко. Несмотря на это, просто создание ABRecordRef
не добавляет его в адресную книгу. Как ABPerson Reference documentation говорит:
Person запись не обязательно должна быть сохранена в базе данных адресной книги. Вы можете использовать записи людей как способ группировать контактную информацию и представлять ее пользователю через, например, контроллер вида человека (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
и установить свойства.Тогда класс посмотреть на карте будет добавить, что экземпляр непосредственно на карту (так как лицо уже реализует MKAnnotation):
[mapView addAnnotation:person];
Когда штифт сливают, вид карты будет вызывать метод didSelectAnnotationView
делегата. Или вы можете добавить кнопку раскрытия в выноску аннотации в viewForAnnotation
и ответить на это в методе делегата calloutAccessoryControlTapped
.
Какой бы метод действий вы решили использовать, в этом методе вы могли бы создать ABRecordRef
, установить его значения из объекта аннотации и затем показать ABPersonViewController
. В обоих методах делегатов объект аннотации Person
можно было бы получить, используя:
Person *personTapped = (Person *)view.annotation;
Где конкретно замешательство? Вам нужно хранить информацию о человеке в ABPerson? Возможно, вы можете просто создать ABPerson, когда вам нужно фактически отобразить ABPersonViewController. Хотя вы должны иметь возможность создать класс аннотации с авионом ABPerson. – Anna
Будет ли сохранять 'person' в' ABPerson' автоматически сохранять 'person' в адресной книге телефона? В моем случае мне не нужно сохранять 'person' в моей адресной книге, мне просто нужно отобразить vCard' person', когда я нажимаю булавку в 'mapview' –
. В классе веб-службы вы создаете ABPerson или у вас есть собственный класс «Личность»? Я не думаю, что просто создание записи ABPerson в памяти добавляет ее в адресную книгу. – Anna