gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 20:08:21 25 4
gpt4 key购买 nike

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

以上所有操作都完美无缺。我的问题是,如果电话号码数据包含此字符串,我需要执行特定代码:_$!<Mobile>!$_

所以我设置了一个 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 循环开头的代码。一旦到达“if([phoneNumber rangeOfString:@"+"].location == NSNotFound)”,错误就会打印到控制台:

for (i = 0; i < [allContacts count]; i++)
{


Person *person = [[Person alloc] init];

ABRecordRef contactPerson = (__bridge ABRecordRef)allContacts[i];
NSString *firstName = (__bridge_transfer NSString
*)ABRecordCopyValue(contactPerson, kABPersonFirstNameProperty);
NSString *phoneNumber = (__bridge_transfer NSString *)ABRecordCopyValue(contactPerson, kABPersonPhoneProperty);


person.firstName = firstName;

person.phoneNumber = phoneNumber;

NSLog(@"%@", phoneNumber);

//MOBILE PHONE PSEUDOCODE STARTS HERE

// If the value of phoneNumber contains the text “_$!<Mobile>!$_” , then we want to grab a substring out of it.

if([phoneNumber rangeOfString:@"_$!<Mobile>!$_"].location == NSNotFound) {

NSLog(@"Not a mobile phone number");

} else {

NSLog(@"It is a mobile phone number");

// If the value of phoneNumber contains a “+”, then grab the substring that starts with the + and then the next additional 10 spaces and place the substring in the mobilePhoneNumber object. (Which will grab the + sign and the 10 digit phone number. )

if([phoneNumber rangeOfString:@"+"].location == NSNotFound) {


NSLog(@"Phone number does not start with a +");


} else {

NSLog(@"Phone number does start with a +");

NSString *subString = [phoneNumber substringWithRange: NSMakeRange(0, [phoneNumber rangeOfString: @"+"].location)];

NSLog(@"%@", subString);

}

}

//PFQUERY CODE TESTING!!!

}
}

}

感谢您的帮助。

最佳答案

电话号码不是字符串。它被定义为多值,因为那里可以有 0..x 个数字。

你不能只把它当作一个字符串。你需要通过 multival 进行枚举\

例如获得任何类型的第一个

    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);

关于ios - rangeOfString 方法调用导致无法识别的选择器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21209502/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com