stringByReplacingOccurrencesOfString 仅适用于某些对象(调试器中的 NSString



我有一种从iPhone联系人应用程序中获取所有联系人的方法,我想在删除电话号码字符串中的所有空格后将电话号码添加到对象中。问题是这仅适用于某些联系人。我注意到在调试器中,字符串对象有时显示为蓝色,有时显示为黑色。有人知道这里发生了什么吗?

图像:

不删除电话号码中的空格

http://ctrlv.in/293692

删除电话号码中的空格

http://ctrlv.in/293691

法典:

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];
    }
}
有许多

字符在 NSString s 中显示为空格。 删除所有这些实例是相当困难的。 适合您的情况的最佳方法是仅保留所需的字符(数字)。 正如您引用的答案所述,您需要创建一组要保留的字符:

NSCharacterSet *numbers = [NSCharacterSet 
        characterSetWithCharactersInString:@"0123456789"];

然后,您需要删除除这些字符之外的所有内容。 这可以通过几种不同的方式完成。 您建议的答案中的扫描仪可能是最快的。 但是代码行最少(在我看来最具可读性)的方式是这样的:

number = [[number componentsSeparatedByCharactersInSet: numbers] componentsJoinedByString: @""];

它可能很慢,所以如果你这样做一百万次,然后保持扫描仪。

最新更新