2017-08-26 91 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。所以沒關係。 –