需要在字符串中使用单个子串

时间:2014-01-19 05:49:51

标签: ios objective-c nsstring

我目前正在iPhone上的地址簿中访问联系人数据,到目前为止一切正常。联系人的电话号码打印到日志:3095679973

但是,如果联系人有多个电话号码,例如3,如果您已输入移动电话,工作电话和家庭电话......那么联系人的号码将打印到日志中,如下所示:

4422697237,
8145537755,
7195599505

我需要设置某种类型的逻辑,以便如果地址簿中的联系人确实有多个上述电话号码,那么电话号码将被分开,以便我们可以单独使用它们。

重点是我正在向我的数据库发送查询以查看它是否包含要打印到日志的电话号码,此时我只能用逗号查询所有3个号码会导致数据库说实际上他们没有匹配。

以下是我最初访问和使用电话号码数据的方式:

ABMultiValueRef *phoneNumber = ABRecordCopyValue(contactPerson, kABPersonPhoneProperty);

NSMutableArray *numbers = [NSMutableArray array];

//NSLog(@"The count: %ld", ABMultiValueGetCount(phoneNumber));

        NSString *number = (__bridge_transfer NSString*)ABMultiValueCopyArrayOfAllValues(phoneNumber);

        // Do what you want with the number

        [numbers addObject:number];

        NSString *numberValues = [[NSString alloc]initWithFormat:@"%@", number];

然后我打印numberValues对象中包含的数据,如下所示:

NSLog(@"Here are the phone number(s) for this contact: %@", numberValues);

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

AddressBook中的电话号码是多值属性。因为您正在使用ABMultiValueCopyArrayOfAllValues,所以您将它们全部复制到带有逗号的类似数组格式的单个字符串中。

相反,你应该遍历所有电话号码并将它们复制到一个实际的数组中(每个电话号码都包含一个单独的字符串):

ABMultiValueRef allPhoneNumbers = (NSString *)ABRecordCopyValue(person, kABPersonPhoneProperty);
NSMutableArray *phoneNumbers = [NSMutableArray new];

for (CFIndex i = 0; i < ABMultiValueGetCount(allPhoneNumbers); i++) 
{
    NSString *number = (__bridge_transfer NSString*)ABMultiValueCopyValueAtIndex(allPhoneNumbers, i);
    [phoneNumbers addObject:number];
}