Ios rangeOfString方法调用导致无法识别的选择器错误

Ios rangeOfString方法调用导致无法识别的选择器错误,ios,objective-c,for-loop,unrecognized-selector,nsrange,Ios,Objective C,For Loop,Unrecognized Selector,Nsrange,我正在访问通讯簿联系人,然后在所有联系人上运行for循环。循环的主要目的是访问用户通讯簿联系人的名字和电话号码值,并将这些值放入NSString对象中 所有这些都非常有效。我的问题是,如果电话号码数据包含以下字符串,我需要执行特定代码:\u$$_ 因此,我在包含电话号码数据的对象上设置了一个rangeOfString方法调用,这导致了问题 下面是在我将rangeOfString方法调用添加到代码后打印到控制台的内容: 2014-01-18 12:10:49.190 PhotoTest1[1244

我正在访问通讯簿联系人,然后在所有联系人上运行for循环。循环的主要目的是访问用户通讯簿联系人的名字和电话号码值,并将这些值放入NSString对象中

所有这些都非常有效。我的问题是,如果电话号码数据包含以下字符串,我需要执行特定代码:
\u$$_

因此,我在包含电话号码数据的对象上设置了一个
rangeOfString
方法调用,这导致了问题

下面是在我将
rangeOfString
方法调用添加到代码后打印到控制台的内容:

2014-01-18 12:10:49.190 PhotoTest1[1244:60b] -[__NSCFType rangeOfString:]: unrecognized     selector sent to instance 0x14e9ac90
2014-01-18 12:10:49.193 PhotoTest1[1244:60b] *** Terminating app due to uncaught exception     'NSInvalidArgumentException', reason: '-[__NSCFType rangeOfString:]: unrecognized selector    sent to instance 0x14e9ac90'
*** First throw call stack:
(0x2f8f6f4b 0x39d376af 0x2f8fa8e7 0x2f8f91cb 0x2f8fa478 0x55e29 0x3206e37b 0x3206e139     0x32117e27 0x3215449b 0x32152dd3 0x32151e25 0x3232dcb3 0x3209e713 0x3209e6b3 0x3209e691    0x3208a11f 0x3209e107 0x3209ddd9 0x32098e65 0x3206e79d 0x3206cfa3 0x2f8c2183 0x2f8c1653 0x2f8bfe47 0x2f82ac27 0x2f82aa0b 0x34551283 0x320ce049 0x54495 0x3a23fab7)
libc++abi.dylib: terminating with uncaught exception of type NSException
这是我所有以for循环开始的代码。如果([phoneNumber rangeOfString:@“+”)。location==NSNotFound)
”,则该错误会在到达“
时立即打印到控制台:

for(i=0;i<[allContacts count];i++)
{
Person*Person=[[Person alloc]init];
ABRecordRef contactPerson=(桥ABRecordRef)所有联系人[i];
NSString*firstName=(\u桥\u传输NSString)
*)ABRecordCopyValue(联系人、KabbersonfirstNameProperty);
NSString*电话号码=(uu_桥u传输NSString*)ABRECORDCYVALUE(contactPerson,KabbersonPhoneProperty);
person.firstName=firstName;
person.phoneNumber=电话号码;
NSLog(@“%@”,电话号码);
//手机伪码从这里开始
//如果phoneNumber的值包含文本“$!!$”,那么我们希望从中获取一个子字符串。
if([phoneNumber rangeOfString:@“\u$!!$\ u”].location==NSNotFound){
NSLog(“非移动电话号码”);
}否则{
NSLog(@“这是一个移动电话号码”);
//如果phoneNumber的值包含一个“+”,则抓取以+开头的子字符串,然后抓取下一个额外的10个空格,并将子字符串放置在mobilePhoneNumber对象中。(这将抓取+号和10位电话号码。)
如果([phoneNumber rangeOfString:@“+”)。位置==NSNotFound){
NSLog(@“电话号码不以+”开头);
}否则{
NSLog(@“电话号码以+”开头);
NSString*subString=[phoneNumber substringWithRange:NSMakerRange(0[phoneNumber rangeOfString:@“+”].location)];
NSLog(@“%@”,子字符串);
}
}
//PFQUERY代码测试!!!
}   
}
}

谢谢你的帮助。

电话号码没有字符串。它被定义为多变量,因为其中可以有0..x个数字

你不能把它当作一根绳子。您需要通过multival进行枚举\

e、 g.获得任何类型的第一个

    ABMultiValueRef phoneEntries = ABRecordCopyValue(person, kABPersonPhoneProperty);       
    NSMutableArray *numbers = [NSMutableArray array)];
    for(int i = 0; i < ABMultiValueGetCount(phoneEntries); i++) {
         NSString *number = (__bridge_transfer NSString*)ABMultiValueCopyValueAtIndex(phoneEntries, i))];
         // Do what you want with the number
         [numbers addObject:number];
    }
    CFRelease(phoneEntries);
ABMultiValueRef phoneEntries=ABRecordCopyValue(person,kABPersonPhoneProperty);
NSMutableArray*数字=[NSMutableArray];
for(int i=0;i
电话号码不是字符串。它被定义为多变量,因为其中可以有0..x个数字

你不能把它当作一根绳子。您需要通过multival进行枚举\

e、 g.获得任何类型的第一个

    ABMultiValueRef phoneEntries = ABRecordCopyValue(person, kABPersonPhoneProperty);       
    NSMutableArray *numbers = [NSMutableArray array)];
    for(int i = 0; i < ABMultiValueGetCount(phoneEntries); i++) {
         NSString *number = (__bridge_transfer NSString*)ABMultiValueCopyValueAtIndex(phoneEntries, i))];
         // Do what you want with the number
         [numbers addObject:number];
    }
    CFRelease(phoneEntries);
ABMultiValueRef phoneEntries=ABRecordCopyValue(person,kABPersonPhoneProperty);
NSMutableArray*数字=[NSMutableArray];
for(int i=0;i
电话号码不是字符串。它被定义为多变量,因为其中可以有0..x个数字

你不能把它当作一根绳子。您需要通过multival进行枚举\

e、 g.获得任何类型的第一个

    ABMultiValueRef phoneEntries = ABRecordCopyValue(person, kABPersonPhoneProperty);       
    NSMutableArray *numbers = [NSMutableArray array)];
    for(int i = 0; i < ABMultiValueGetCount(phoneEntries); i++) {
         NSString *number = (__bridge_transfer NSString*)ABMultiValueCopyValueAtIndex(phoneEntries, i))];
         // Do what you want with the number
         [numbers addObject:number];
    }
    CFRelease(phoneEntries);
ABMultiValueRef phoneEntries=ABRecordCopyValue(person,kABPersonPhoneProperty);
NSMutableArray*数字=[NSMutableArray];
for(int i=0;i
电话号码不是字符串。它被定义为多变量,因为其中可以有0..x个数字

你不能把它当作一根绳子。您需要通过multival进行枚举\

e、 g.获得任何类型的第一个

    ABMultiValueRef phoneEntries = ABRecordCopyValue(person, kABPersonPhoneProperty);       
    NSMutableArray *numbers = [NSMutableArray array)];
    for(int i = 0; i < ABMultiValueGetCount(phoneEntries); i++) {
         NSString *number = (__bridge_transfer NSString*)ABMultiValueCopyValueAtIndex(phoneEntries, i))];
         // Do what you want with the number
         [numbers addObject:number];
    }
    CFRelease(phoneEntries);
ABMultiValueRef phoneEntries=ABRecordCopyValue(person,kABPersonPhoneProperty);
NSMutableArray*数字=[NSMutableArray];
for(int i=0;i
明白了。我的主要目标是提取手机号码数据,并清除存储的所有其他垃圾。我可以像你说的那样通过枚举multival来做到这一点吗?如果可以的话,你能给我一个代码示例或者给我一些文档吗?如果我理解正确的话。。。通过使用上面的代码,我将能够完全按照我之前尝试的方式使用rangeOfString,因为现在我使用的是ABMultiValueGetCount和ABMultiValueCopyValueAtIndex,而不是使用count和ABRecordCopyValue?我仍然不明白,当我实例化NSStri时,为什么不能在我的原始代码中使用rangeOfString