1

アドレスブックの名前を取得できません。アルファベットの各文字で名前を取得したいだけです。

これは私がこれまでに持っているコードです

ABAddressBookRef addressBook = ABAddressBookCreate();
totalPeople = (__bridge_transfer NSMutableArray *)ABAddressBookCopyArrayOfAllPeople(addressBook);

NSString *aString = @"A";

for(int i =0;i<[totalPeople count];i++){
    ABRecordRef thisPerson = (__bridge ABRecordRef)
    [totalPeople objectAtIndex:i];
    lastName = (__bridge_transfer NSString *) ABRecordCopyValue(thisPerson, kABPersonLastNameProperty);
}

どうしたらいいかわからない、見てくれてありがとう。

今はこんな感じです

 ABAddressBookRef addressBook = ABAddressBookCreate();
totalPeople = (__bridge_transfer NSMutableArray *)ABAddressBookCopyArrayOfAllPeople(addressBook);

NSString *aString = @"A";

for(int i =0;i<[totalPeople count];i++){
    ABRecordRef thisPerson = (__bridge ABRecordRef)
    [totalPeople objectAtIndex:i];
    lastName = (__bridge_transfer NSString *) ABRecordCopyValue(thisPerson, kABPersonLastNameProperty);

    NSString *firstLetterOfCopiedName = [lastName substringWithRange: NSMakeRange(0,1)];
    if ([firstLetterOfCopiedName compare: aString options: NSCaseInsensitiveSearch] == NSOrderedSame) {
        //This person's last name matches the string aString
        aArray = [[NSArray alloc]initWithObjects:lastName, nil];
    }

}

配列に1つの名前を追加するだけですが、すべてを追加するにはどうすればよいですか。申し訳ありませんが、私はiOSの開発にかなり慣れていません!

4

1 に答える 1

1

このようなものを使用して、結果を配列に格納するか、結果を返すことができます。(未検証)

NSString *firstLetterOfCopiedName = [lastName substringWithRange: NSMakeRange(0,1)];
if ([firstLetterOfCopiedName compare: aString options: NSCaseInsensitiveSearch] == NSOrderedSame) {
    //This person's last name matches the string aString
}

ループの外側に配列を割り当てる必要があります (そうしないと、1 つのオブジェクトしか含まれません)。また、配列は NSMutableArray である必要があります (変更できるようにするため)。以下に例を示します。

ABAddressBookRef addressBook = ABAddressBookCreate();
totalPeople = (__bridge_transfer NSMutableArray*)ABAddressBookCopyArrayOfAllPeople(addressBook);

NSString *aString = @"A";

//This is the resulting array
NSMutableArray *resultArray = [[NSMutableArray alloc] init];

for(int i =0;i<[totalPeople count];i++){
    ABRecordRef thisPerson = (__bridge ABRecordRef)
    [totalPeople objectAtIndex:i];
    lastName = (__bridge_transfer NSString *) ABRecordCopyValue(thisPerson, kABPersonLastNameProperty);

    NSString *firstLetterOfCopiedName = [lastName substringWithRange: NSMakeRange(0,1)];
    if ([firstLetterOfCopiedName compare: aString options: NSCaseInsensitiveSearch] == NSOrderedSame) {
        //This person's last name matches the string aString
        [resultArray addObject: lastName];
    }

}

//print contents of array
for(NSString *lastName in resultArray) {
    NSLog(@"Last Name: %@", lastName);
}
于 2012-04-19T02:54:37.540 に答える