Ios 创建联系人应用程序--如何更好地处理电子邮件/电话号码?
我的应用程序连接到iOS的Addressbook框架,我正在获取联系信息Ios 创建联系人应用程序--如何更好地处理电子邮件/电话号码?,ios,objective-c,parse-platform,abaddressbook,Ios,Objective C,Parse Platform,Abaddressbook,我的应用程序连接到iOS的Addressbook框架,我正在获取联系信息 名字 姓氏 公司名称 家庭电子邮件 工作电子邮件 家庭电话 工作电话 手机 我需要详细说明我掌握的信息。 我在应用程序中遇到的问题是,它将联系人导入应用程序上的用户数据库。当这种情况发生时,如果我有多个家庭电子邮件(或任何其他电子邮件/电话字段),那么它将导入两个用户 这是我的个人模型 #import <Foundation/Foundation.h> #import <AddressBook/Add
- 名字
- 姓氏
- 公司名称
- 家庭电子邮件
- 工作电子邮件
- 家庭电话
- 工作电话
- 手机
#import <Foundation/Foundation.h>
#import <AddressBook/AddressBook.h>
@interface Person : NSObject
@property (nonatomic, strong) NSString *firstName;
@property (nonatomic, strong) NSString *lastName;
@property (nonatomic, strong) NSString *fullName;
@property (nonatomic, strong) NSString *homeEmail;
@property (nonatomic, strong) NSString *workEmail;
@property (nonatomic, strong) NSString *companyName;
@property (nonatomic, strong) NSString *homePhone;
@property (nonatomic, strong) NSString *workPhone;
@property (nonatomic, strong) NSString *cellPhone;
@property (nonatomic, strong) NSString *sortByName; // Used only for sorting
@property (nonatomic) ABRecordID publicContactRecordId;
@property (nonatomic) NSString *parseObjectId;
- (NSComparisonResult)compareFirstName:(Person *)otherObject;
@end
#导入
#进口
@接口人:NSObject
@属性(非原子,强)NSString*firstName;
@属性(非原子,强)NSString*lastName;
@属性(非原子,强)NSString*fullName;
@属性(非原子,强)NSString*homeEmail;
@属性(非原子,强)NSString*工作电子邮件;
@属性(非原子,强)NSString*companyName;
@属性(非原子,强)NSString*家庭电话;
@属性(非原子,强)NSString*工作电话;
@属性(非原子,强)NSString*手机;
@属性(非原子,强)NSString*sortByName;//仅用于分类
@属性(非原子)ABRecordID publicContactRecordId;
@属性(非原子)NSString*parseObjectId;
-(NSComparisonResult)compareFirstName:(Person*)其他对象;
@结束
我想也许我应该把它们作为字典或数组?问题是现在,显然我不能有超过一个家庭电子邮件和任何其他领域
这可能会提供更多的见解,
我在存钱
编辑:
下面是我如何从地址簿api检索电子邮件和电话号码
//email
ABMultiValueRef emails = ABRecordCopyValue(contactPerson,
kABPersonEmailProperty);
NSUInteger j = 0;
for (j = 0; j < ABMultiValueGetCount(emails); j++){
NSString *email = (__bridge_transfer NSString *)ABMultiValueCopyValueAtIndex(emails, j);
if (j == 0){
if(email){
person.homeEmail = email;
}
}
else if (j==1){
if(email){
person.workEmail = email;
}
}
}
ABMultiValueRef numbers = ABRecordCopyValue(contactPerson, kABPersonPhoneProperty);
for (CFIndex i = 0; i < ABMultiValueGetCount(numbers); i++) {
NSString *phoneLabel = (__bridge NSString *)ABMultiValueCopyLabelAtIndex(numbers, i);
NSString *phoneNumber = (__bridge NSString *)ABMultiValueCopyValueAtIndex(numbers, i);
//NSLog(@"%@ | %@",phoneLabel,phoneNumber);
if([phoneLabel isEqualToString:@"Home Phone"])
{
person.homePhone = phoneNumber;
}else if([phoneLabel isEqualToString:@"Work Phone"])
{
person.workPhone = phoneNumber;
}else if([phoneLabel isEqualToString:@"Cell Phone"])
{
person.cellPhone = phoneNumber;
}
}
//电子邮件
ABMultiValueRef emails=ABRecordCopyValue(联系人,
卡伯森酒店;
整数j=0;
对于(j=0;j
有两种方法可以构建此结构:
Person
类,使其具有email
属性,该属性是NSDictionary
条目的NSArray
。每本词典都有地址和类型(主页
,工作
,等等)。对于手机
,也可以采用类似的方法
Person
类,使家庭电子邮件
、工作电子邮件
、家庭电话
和工作电话
都是NSArray
类型,并且每个类型都包含一个表示电子邮件地址和电话号码的字符串数组对于这两个选项,数据库中需要两个额外的表,一个用于电子邮件地址,另一个用于电话号码。它们的结构非常基本:
userid
(从users
表中)、类型
(家庭、工作等),以及电子邮件地址
或电话号码
列 这并不是你问题的答案,但可能会有所帮助。地址簿的Objective-C包装器。我喜欢这个答案,我想开始制作原型。你能否提供一些见解,看看我检索电子邮件地址和电话号码的方法是否适合你的第一选择?我编辑了我的主要帖子。@envinyater循环是正确的方式,是的。您还需要提取和解析电子邮件地址/电话号码的类型。可以使用ab多值CopyLabelaIndex
执行此操作。它返回一个CFStringRef
您可以使用免费桥接将其转换为NSString
。它看起来像\u$$_代码>。