0

我创建了一个人对象

ABRecordRef person = ABPersonCreate(); 

我从我的网络服务中设置人员的属性。person设置了所有属性,例如名字、姓氏、电子邮件 ID、电话号码、地址、网址等。

我想加载一个带有多个图钉的地图视图,其中每个特定的图钉都包含有关特定人的信息。点击每个图钉,我需要加载ABPersonViewController每个人的班级。我不确定如何使用我拥有的信息添加注释,以及特定引脚如何保存有关特定人的信息。在这种情况下,此人可能在我的通讯录中,也可能不在我的通讯录中,我不需要将该人保存在我的通讯录中。我真的很困惑如何做到这一点。需要帮忙。

编辑:

我有 3 节课:

!. Web service类:我有 person 对象的地方。2.MapView类:我加载地图视图的地方。3.Annotation类:其中包含有关我的注释的详细信息。

我将如何使用人员记录并通过ABPersonViewController. 我的annotation课应该怎么样?

4

1 回答 1

1

我首先要做的是创建一个也实现协议的Person类(的子类)。如果您愿意,可以创建两个单独的类(“Person”和“PersonAnnotation”),但这不是必需的。NSObjectMKAnnotation

Person类中,您可以声明自己的个人相关属性,例如名字、姓氏、电子邮件地址等,或者您可以只拥有一个ABRecordRefivar 并让它为您存储各个字段。

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

Web 服务类将创建一个实例Person并设置属性。然后地图视图类会将该实例直接添加到地图中(因为 Person 已经实现了 MKAnnotation):

[mapView addAnnotation:person];

当点击 pin 时,地图视图将调用didSelectAnnotationView委托方法。或者,您可以在注释的标注中添加一个披露按钮,并在委托方法viewForAnnotation中对其进行响应。calloutAccessoryControlTapped

无论您决定使用哪种操作方法,您都可以在该方法中创建一个ABRecordRef,从注释对象设置其值,然后显示ABPersonViewController. 在这两种委托方法中,Person可以使用以下方法检索注释对象:

Person *personTapped = (Person *)view.annotation;
于 2012-03-22T15:38:16.220 回答