2017-08-26 92 views
0

我正在使用AddressBook开发IOS应用程序。ABRecordCopyCompositeName和CFBridgingRelease崩溃问题

这是我用的代码。

我碰到了substringWithRange函数的崩溃问题。

什么是崩溃原因?

谢谢。

NSString * sort_name = CFBridgingRelease(ABRecordCopyCompositeName(person)); 
if (sort_name != nil) { 
    [self Make_Sorting_Name:sort_name]; 


- (NSDictionary *)Make_Sorting_Name:(NSString *)sort_name { 

      NSString * sort_char = [[NSString stringWithString:[sort_name substringWithRange:NSMakeRange(0, 1)]] uppercaseString]; 

      NSCharacterSet *nonDigits = [NSCharacterSet letterCharacterSet]; 
      BOOL containsNonDigitChars = ([sort_char rangeOfCharacterFromSet:nonDigits].location == NSNotFound);    

     } 
+0

仅供参考 - 从iOS 9.0开始,您应该使用较新的Contacts框架,而不是弃用的AddressBook框架。 – rmaddy

回答

1

ABRecordCopyCompositeName函数有时可能返回零或空字符串。所以这个案例需要检查:

NSString *sort_char = @""; //or another specific character for sorting 
if (sort_name != nil && sort_name.length > 0){ 
    sort_char = [[NSString stringWithString:[sort_name substringWithRange:NSMakeRange(0, 1)]] uppercaseString]; 
} 
+0

有没有问题,我用CFBridgingRelease? –

+0

当ABRecordCopyCompositeName将返回空字符串? –

+0

'CFBridgingRelease'将非Objective-C指针移动到Objective-C,并将所有权转移给ARC。所以没关系。 –