0

アドレス帳から特定のデータの配列を取得する際に問題が発生しています。コードは次のとおりです。

- (void) getContacts{    
    ABAddressBookRef ab = ABAddressBookCreate();
    NSMutableArray *retVal = (__bridge NSMutableArray *)(ABAddressBookCopyArrayOfAllPeople(ab));
    CFRelease(ab);

    contact* temp=[[contact alloc] init];
    NSMutableArray* tempArray=[[NSMutableArray alloc]init];

    for(int i=0;i<[retVal count];i++)
        [tempArray insertObject:
          [NSString stringWithFormat:@"%@",
            [temp set2:[NSString stringWithFormat:@"%@",
              [[retVal objectAtIndex:i] kABPersonFirstNameProperty]] 
                  last:[NSString stringWithFormat:@"%@",
                    [[retVal objectAtIndex:i] kABPersonLastNameProperty]] 
                number:[NSString stringWithFormat:@"%@",
                  [[retVal objectAtIndex:i] kABPersonPhoneProperty]]]] atIndex:i];

    _objects=tempArray;

    [self alert:[NSString stringWithFormat:@"%@",_objects] title:@"TEMP"];
}

私が得ているエラーは、kABPerson プロパティに関するものです。

もう少し明確にします。基本的には、アドレス帳からすべてのデータを最初の配列に取得し、その配列を手動で調べて、アプリの残りの部分に必要なデータを取得しようとしています。

何か案は?

Just for more clarification here's my contact.h file:

@interface contact : NSString{
    NSString* first;
    NSString* last;
    NSString* number;
}
@end

そして、これが私の contact.m ファイルです:

@implementation contact

- (void) set:(NSString*)first2 last:(NSString*)last2 number:(NSString*)number2{
    first=first2;
    last=last2;
    number=number2;
}

- (contact*) set2:(NSString*)first2 last:(NSString*)last2 number:(NSString*)number2{
    first=first2;
    last=last2;
    number=number2;

    return self;
}

@end

投稿するには長すぎると思われる行を次に示します。

//Enter contact into tempArray
    [tempArray insertObject:[NSString stringWithFormat:@"%@",[temp set:[NSString stringWithFormat:@"%@",(__bridge NSString *)(ABRecordCopyValue((__bridge ABMultiValueRef)[retVal objectAtIndex:i],kABPersonFirstNameProperty))] last:[NSString stringWithFormat:@"%@",(__bridge NSString *)(ABRecordCopyValue((__bridge ABMultiValueRef)[retVal objectAtIndex:i],kABPersonLastNameProperty))] number:(__bridge NSString *)ABMultiValueCopyValueAtIndex((__bridge ABMultiValueRef)((__bridge NSString*)ABRecordCopyValue((__bridge ABRecordRef)([retVal objectAtIndex:i]),kABPersonPhoneProperty)), 0)]] atIndex:i];
4

1 に答える 1

0

kABPersonFirstNamePropertyObjective-C オブジェクト プロパティではなく、プロパティIDです。

つまり、使用できません[[retVal objectAtIndex:i] kABPersonFirstNameProperty]-- 代わりに、次のように姓名にアクセスする必要があります。

CFStringRef firstName = ABRecordCopyValue ([retVal objectAtIndex:i], kABPersonFirstNameProperty);
CFStringRef lastName = ABRecordCopyValue ([retVal objectAtIndex:i], kABPersonLastNameProperty);
CFStringRef phoneNum = ABRecordCopyValue ([retVal objectAtIndex:i], kABPersonPhoneProperty);

次に、ABRecordCopyValue が Create Rule に従うことを忘れないでください。後で行う必要がありますCFRelease(firstName)

于 2012-09-27T15:28:17.447 に答える