【问题标题】:Creating a Contacts application -- What can I do to handle email/phone numbers better?创建联系人应用程序——我可以做些什么来更好地处理电子邮件/电话号码?
【发布时间】:2014-01-06 03:15:44
【问题描述】:

我的应用程序与 iOS 的 Addressbook 框架相关联,我正在获取联系信息。

  • 名字
  • 姓氏
  • 公司名称
  • 家庭邮箱
  • 工作邮箱
  • 家庭电话
  • 工作电话
  • 手机

我需要扩展我正在获取的信息。 我在应用程序中遇到的问题是将联系人导入应用程序的用户数据库中。发生这种情况时,如果我有多个家庭电子邮件(或任何其他电子邮件/电话字段),则它会导入两个用户。

这是我的 Person 模型

#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

我想也许我应该将它们作为字典或数组?问题是现在,显然我不能拥有多个家庭电子邮件和任何其他字段。

这可能会提供更多见解, 我在省钱

编辑:

这是我从地址簿 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;
    }

}

【问题讨论】:

标签: ios objective-c parse-platform abaddressbook


【解决方案1】:

有两种结构方式:

  1. 修改您的 Person 类,使其具有 NSArrayNSDictionary 条目的 email 属性 - 每个字典将具有 addresstypehome,@987654328 @, ETC)。 phone 可以采用类似的方法。

  2. 修改您的Person 类,使homeEmailworkEmailhomePhoneworkPhoneNSArray 类型,并且每个都包含代表电子邮件地址和电话号码的字符串数组。

对于这两个选项,您需要在数据库中添加两个额外的表——一个用于电子邮件地址,一个用于电话号码。它们的结构非常基本:userid(来自users 表)、type(家庭、工作等)和email addressphone number 列。

【讨论】:

  • 我喜欢这个答案,我想开始制作它的原型。您能否就我的检索电子邮件地址和电话号码的方法是否适合您的首选方法提供一些见解?我编辑了我的主要帖子。
  • @envinyater 循环是正确的方法,是的。您还需要提取和解析电子邮件地址/电话号码的类型。您可以使用ABMultiValueCopyLabelAtIndex 执行此操作。它返回一个CFStringRef,您可以使用免费桥接将其转换为NSString。它看起来像_$!&lt;Home&gt;!$_
猜你喜欢
  • 2023-04-04
  • 2014-02-12
  • 2018-08-18
  • 1970-01-01
  • 1970-01-01
  • 2017-01-09
  • 2011-08-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多