stringByReplacingOccurrencesOfString仅适用于某些对象(调试器中的NSString黑色而不是蓝色)

时间:2014-02-10 14:38:16

标签: ios xcode debugging xcode5

我有一种从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];
    }
}

1 个答案:

答案 0 :(得分:1)

NSString s中有许多字符显示为空格。删除所有这些实例都很困难。对你的情况最好的方法是只保留你想要的字符(数字)。正如您引用的答案所述,您需要创建一组要保留的字符:

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

然后你需要移除除了那些角色之外的所有东西。这可以通过几种不同的方式完成。您建议的答案中的扫描仪可能是最快的。但是用最少的代码行(在我看来最具可读性)的方式就像:

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

它可能很慢,所以如果你这样做了一百万次,那就留在扫描仪上。