我有一种从iPhone联系人应用程序获取所有联系人的方法,我想在删除电话号码字符串中的所有空格后将电话号码添加到对象。问题是这只适用于某些联系人。我注意到在调试器中,字符串对象有时会显示为蓝色,有时显示为黑色。有人知道这里发生了什么吗?
图片:
不删除电话号码中的空格
删除电话号码中的空格
代码:
ABRecordRef source = ABAddressBookCopyDefaultSource(addressBook);
CFArrayRef sortedPeople = ABAddressBookCopyArrayOfAllPeopleInSourceWithSortOrdering(addressBook, source, kABPersonSortByFirstName);
//RETRIEVING THE FIRST NAME AND PHONE NUMBER FROM THE ADDRESS BOOK
CFIndex number = CFArrayGetCount(sortedPeople);
NSString *firstName;
NSString *phoneNumberFromContact;
for(int i = 0; i < number; i++)
{
ABRecordRef person = CFArrayGetValueAtIndex(sortedPeople, i);
firstName = (__bridge NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty);
ABMultiValueRef phones = ABRecordCopyValue(person, kABPersonPhoneProperty);
phoneNumberFromContact = (__bridge NSString *) ABMultiValueCopyValueAtIndex(phones, 0);
if(phoneNumberFromContact != NULL)
{
Contact *contact = [[Contact alloc]init];
contact.firstName = firstName;
phoneNumberFromContact = [phoneNumberFromContact stringByReplacingOccurrencesOfString:@" " withString:@""];
contact.phoneNumber = phoneNumberFromContact;
[self.contacts addObject:contact];
}
}
答案 0 :(得分:1)
NSString
s中有许多字符显示为空格。删除所有这些实例都很困难。对你的情况最好的方法是只保留你想要的字符(数字)。正如您引用的答案所述,您需要创建一组要保留的字符:
NSCharacterSet *numbers = [NSCharacterSet
characterSetWithCharactersInString:@"0123456789"];
然后你需要移除除了那些角色之外的所有东西。这可以通过几种不同的方式完成。您建议的答案中的扫描仪可能是最快的。但是用最少的代码行(在我看来最具可读性)的方式就像:
number = [[number componentsSeparatedByCharactersInSet: numbers] componentsJoinedByString: @""];
它可能很慢,所以如果你这样做了一百万次,那就留在扫描仪上。