2017-08-26 4 views
0

Je développe une application IOS en utilisant AddressBook.Problème de plantage ABRecordCopyCompositeName et CFBridgingRelease

Voici mon code que j'ai utilisé.

Je rencontre un problème de plantage sur la fonction substringWithRange.

Quelle est la raison de l'accident?

Merci.

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

FYI - À partir de iOS 9.0, vous devriez utiliser le nouveau cadre de contacts, pas le framework AdBook obsolète. – rmaddy

Répondre

1

La fonction ABRecordCopyCompositeName peut retourner nulle ou chaîne vide parfois. Donc, le cas doit être vérifié:

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

il n'y a pas de problème que j'ai utilisé CFBridgingRelease? –

+0

Lorsque ABRecordCopyCompositeName renverra une chaîne vide? –

+0

'CFBridgingRelease' Déplace un pointeur non-Objective-C vers Objective-C et transfère également la propriété à ARC. Donc c'est d'accord. –