XCode 4.2를 사용하여 응용 프로그램을 개발 중이며 initWithVCardRepresentation 및/또는 ABPersonCreatePeopleInSourceWithVCardRepresentation을 사용하여 ABPerson을 만들려고하고 있지만 작동 예제를 찾을 수 없습니다. 누군가 도울 수 있습니까?VCard 표현을 사용하여 사람을 만들 수 없습니다.
내가있는 NSString 형식으로 vCard를 얻을 ....
감사
XCode 4.2를 사용하여 응용 프로그램을 개발 중이며 initWithVCardRepresentation 및/또는 ABPersonCreatePeopleInSourceWithVCardRepresentation을 사용하여 ABPerson을 만들려고하고 있지만 작동 예제를 찾을 수 없습니다. 누군가 도울 수 있습니까?VCard 표현을 사용하여 사람을 만들 수 없습니다.
내가있는 NSString 형식으로 vCard를 얻을 ....
감사
내가 포럼에 어딘가에 발견이 코드를 사용하고 있습니다 :
// Assuming your vCard is stored in vCardString as an NSString
CFDataRef vCardData = (__bridge CFDataRef)[vCardString dataUsingEncoding:NSUTF8StringEncoding];
ABAddressBookRef book = ABAddressBookCreate();
ABRecordRef defaultSource = ABAddressBookCopyDefaultSource(book);
CFArrayRef vCardPeople = ABPersonCreatePeopleInSourceWithVCardRepresentation(defaultSource, vCardData);
CFIndex index = 0;
ABRecordRef person = CFArrayGetValueAtIndex(vCardPeople, index);
을 이것은 가득 예를 들어 완벽하게 작동하면 최신 iOS 8을 기반으로합니다.
먼저 권한 부여 상태를 확인하고 그렇지 않은 경우 액세스 권한을 요청한 다음 vcard를 저장하고 r 아래 eview 코드 :
if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized){
NSLog(@"Authorized");
[self addVcardsIntoAddressBook:vcard];
} else{
NSLog(@"Not determined");
ABAddressBookRequestAccessWithCompletion(ABAddressBookCreateWithOptions(NULL, nil), ^(bool granted, CFErrorRef error) {
if (!granted){
NSLog(@"Just denied");
return;
}
NSLog(@"Just authorized");
[self addVcardsIntoAddressBook:vcard];
});
}
이 vCard를 추가하는 방법입니다 :
- (void)addVcardsIntoAddressBook:(NSData *)vcard {
CFDataRef vCardData = CFDataCreate(NULL, [vcard bytes], [vcard length]);
ABAddressBookRef book = ABAddressBookCreate();
ABRecordRef defaultSource = ABAddressBookCopyDefaultSource(book);
CFArrayRef vCardPeople = ABPersonCreatePeopleInSourceWithVCardRepresentation(defaultSource, vCardData);
for (CFIndex index = 0; index < CFArrayGetCount(vCardPeople); index++) {
ABRecordRef person = CFArrayGetValueAtIndex(vCardPeople, index);
ABAddressBookAddRecord(book, person, NULL);
CFRelease(person);
}
ABAddressBookSave(book, NULL);
} 여기
이 acoustic의 대답 스위프트 버전입니다;
let vCard : NSData // vcard
let addressBook: ABAddressBook? = ABAddressBookCreateWithOptions(nil, nil)?.takeRetainedValue()
ABAddressBookRequestAccessWithCompletion(addressBook) {
granted, error in
if !granted {
return
}
let vCardData = CFDataCreate(nil, UnsafePointer<UInt8>(vCard.bytes), vCard.length)
let defaultSource = ABAddressBookCopyDefaultSource(addressBook)
let vCardPeople = ABPersonCreatePeopleInSourceWithVCardRepresentation(defaultSource.takeUnretainedValue(), vCardData).takeRetainedValue() as NSArray
for person in vCardPeople {
ABAddressBookAddRecord(addressBook, person, nil)
}
let isSaved = ABAddressBookSave(addressBook, nil)
if isSaved{
//succesfully saved
}
else{
//not saved
}
}
나는 그것을 사용하고 있으며 vCard를 2.1으로 잘 작동하고 3.0
있는 NSString * 파일 이름 =되어 [[NSBundle mainBundle] pathForResource : @ "연락처"ofType을 : @ "VCF를"]; NSLog (@ "열린 파일 % @", 파일 이름); NSData * stringData = [NSData dataWithContentsOfFile : filename]; NSString * vCardString = [[NSString alloc] initWithData : stringData 인코딩 : NSUTF8StringEncoding];
CFDataRef vCardData = (__bridge CFDataRef)[vCardString dataUsingEncoding:NSUTF8StringEncoding];
ABAddressBookRef book = ABAddressBookCreate();
ABRecordRef defaultSource = ABAddressBookCopyDefaultSource(book);
CFArrayRef vCardPeople = ABPersonCreatePeopleInSourceWithVCardRepresentation(defaultSource, vCardData);
for (CFIndex index = 0; index < CFArrayGetCount(vCardPeople); index++) {
ABRecordRef person = CFArrayGetValueAtIndex(vCardPeople, index);
ABAddressBookAddRecord(book, person, NULL);
}
CFRelease(vCardPeople);
CFRelease(defaultSource);
ABAddressBookSave(book, NULL);
CFRelease(book);
은 addrressBook이어야합니까? 나는 또한 내장 된 오류 '변수'의 vCard가 '하자 점점 오전 vCard를 :있는 NSData는 // vCard를 vCard를 = 코드 '형식의 값 'NSData'' 에 유형'문자열 '의 값을 할당 할 수 없습니다 어떻게 내가 readableObject 캐스팅 .stringValue를 readableObject NSData에 ?? – alex
문자열을 스캔하여 NSData로 변환해야합니다. func foundCode (code : String) { print ("스캔 한 vCard 정보 \ (코드)") // 시작 vCard : NSData // vcard vCard = 코드 let addressBook : ABAddressBook? = ABAddressBookCreateWithOptions (nil, nil)?. takeRetainedValue()' – alex
[링크] (http://stackoverflow.com/questions/901357/how-do-i-convert-an-nsstring-value- to-nsdata) 나는 지금 내 자신의 질문을 게시합니다 – alex