2012-03-22 8 views
0

Я создал человека объектКак добавить аннотацию в mkmapview

ABRecordRef person = ABPersonCreate(); 

Я установить свойства человека из моих веб-сервисов. person имеет все свойства, такие как имя, фамилия, адрес электронной почты, номер телефона, адрес, URL и т. Д.

Я хочу загрузить карту с несколькими контактами, где каждый конкретный контакт содержит информацию о конкретный человек. При щелчке каждого булавки мне нужно загрузить класс ABPersonViewController каждого человека. Я не уверен, как добавить аннотацию с информацией, которую я имею, и как конкретный контакт может содержать информацию о конкретном человеке. В этом случае лицо может быть или не быть в моей адресной книге, и мне не нужно сохранять человека в моей адресной книге. Я действительно смущен о том, как это сделать. Нужна помощь.

Edit:

У меня есть 3 класса:

!. Web service класс: где у меня есть объект person. 2. MapView класс: где я загружаю карту. 3. Annotation класс: у которого есть подробности о моей аннотации.

Как использовать записи людей и представить их через ABPersonViewController. Как должен быть класс annotation?

+0

Где конкретно замешательство? Вам нужно хранить информацию о человеке в ABPerson? Возможно, вы можете просто создать ABPerson, когда вам нужно фактически отобразить ABPersonViewController. Хотя вы должны иметь возможность создать класс аннотации с авионом ABPerson. – Anna

+0

Будет ли сохранять 'person' в' ABPerson' автоматически сохранять 'person' в адресной книге телефона? В моем случае мне не нужно сохранять 'person' в моей адресной книге, мне просто нужно отобразить vCard' person', когда я нажимаю булавку в 'mapview' –

+0

. В классе веб-службы вы создаете ABPerson или у вас есть собственный класс «Личность»? Я не думаю, что просто создание записи ABPerson в памяти добавляет ее в адресную книгу. – Anna

ответ

1

Что я хотел бы сделать, чтобы создать класс 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; 
+0

У меня есть еще один вопрос. Как передать 'ABRecordref' как аргумент метода. –

+1

В [пример приложения ABUIGroups в GroupViewController.m] (http://developer.apple.com/library/ios/#samplecode/ABUIGroups/Listings/Classes_GroupViewController_m.html#//apple_ref/doc/uid/DTS40011307-Classes_GroupViewController_m- DontLinkElementID_8), найдите метод 'nameForSource' для примера. – Anna

+0

Я получаю следующее предупреждение: «Отправка« ABRecordRef »(aka 'const void *') в параметр типа« ABRecordRef * »(aka 'const void **') отбрасывает квалификаторы' –

Смежные вопросы