Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 创建联系人应用程序--如何更好地处理电子邮件/电话号码?_Ios_Objective C_Parse Platform_Abaddressbook - Fatal编程技术网

Ios 创建联系人应用程序--如何更好地处理电子邮件/电话号码?

Ios 创建联系人应用程序--如何更好地处理电子邮件/电话号码?,ios,objective-c,parse-platform,abaddressbook,Ios,Objective C,Parse Platform,Abaddressbook,我的应用程序连接到iOS的Addressbook框架,我正在获取联系信息 名字 姓氏 公司名称 家庭电子邮件 工作电子邮件 家庭电话 工作电话 手机 我需要详细说明我掌握的信息。 我在应用程序中遇到的问题是,它将联系人导入应用程序上的用户数据库。当这种情况发生时,如果我有多个家庭电子邮件(或任何其他电子邮件/电话字段),那么它将导入两个用户 这是我的个人模型 #import <Foundation/Foundation.h> #import <AddressBook/Add

我的应用程序连接到iOS的Addressbook框架,我正在获取联系信息

  • 名字
  • 姓氏
  • 公司名称
  • 家庭电子邮件
  • 工作电子邮件
  • 家庭电话
  • 工作电话
  • 手机
我需要详细说明我掌握的信息。 我在应用程序中遇到的问题是,它将联系人导入应用程序上的用户数据库。当这种情况发生时,如果我有多个家庭电子邮件(或任何其他电子邮件/电话字段),那么它将导入两个用户

这是我的个人模型

#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$$_