2016-11-14 2 views
3

이것은 장치의 연락처를 가져오고 MutableArray에 저장하는 코드입니다.CNContactStore에서 RecordID를 얻는 방법 ios

하지만 모든 연락처에 개별적으로 recordID을 가져와 나중에 사용할 수 있도록 동일한 Array에 저장해야합니다. 예를 들어 recordId을 사용하여 주소록을 삭제할 수 있습니다.

제발 저에게 4 일 동안 붙어 있습니다. 귀하의 질문에 문에서

[contactStore enumerateContactsWithFetchRequest:request error:nil usingBlock:^(CNContact* __nonnull contact, BOOL* __nonnull stop){ 
      if(contact.phoneNumbers) 
       phoneNumber = [[[contact.phoneNumbers firstObject] value]]; 
      if(contact.emailAddresses) 
       emailAddress = [[contact.emailAddresses firstObject] value]; 
      contactValue=[[NSMutableDictionary alloc] init];    
       [contactValue setValue:phoneNumber ?:@"" forKey:@"phoneNumber"]; 
       [contactValue setValue:emailAddress ?:@"" forKey:@"emailAddress"]; 
       [contactValue setObject:contact.identifier forKey:@"phoneIdentifier"]; 
       [contactValue setObject:contact.givenName ?:@"" forKey:@"firstName"]; 
       [contactValue setObject:contact.familyName ?:@"" forKey:@"lastName"]; 

      [_totalContact addObject:contactValue]; 
     }] 
+0

당신이 붙어 어디? 당신은 무엇을 할 수 없습니까? 그리고 "같은 어레이에 저장하여 나중에 사용"한다는 것은 무엇을 의미합니까? – Adeel

+0

선택한 연락처를 삭제하고 싶습니다. 선택한 연락처를 삭제하는 방법을 알고 있습니까? – iOS

+0

내 대답을 아래에서보십시오. 나는이 코드를 직접 확인했으며 완벽하게 작동한다. – Adeel

답변

3

는 내가 이해하면 delete접촉identifier에 따라 연락처 주소록에서 연락처하려는 것입니다.

- (void)deleteContactWithIdentifier:(NSString *)identifier { 

    NSArray *keys = @[CNContactGivenNameKey, 
         CNContactPhoneNumbersKey, 
         CNContactEmailAddressesKey, 
         CNContactIdentifierKey]; 
    CNMutableContact *contact = [[store unifiedContactWithIdentifier:identifier keysToFetch:keys error:nil] mutableCopy]; 
    NSError *error; 
    CNSaveRequest *saveRequest = [[CNSaveRequest alloc] init]; 
    [saveRequest deleteContact:contact]; 
    [store executeSaveRequest:saveRequest error:&error]; 
} 
+0

Adeel의 완벽한 작업에 감사드립니다. 중복 된 연락처를 병합하는 방법은 있습니까? – iOS

+0

물론 @InderpalSingh. 나는 그것이 당신이이 포스트에 대한 주제에서 벗어날 것이므로 새로운 질문을 할 것을 제안합니다. 여기에 새 질문의 링크를 덧글에 추가 할 수 있습니다. – Adeel

+0

여기 링크 @Adeel [link] (http://stackoverflow.com/questions/40613589/how-to-merger-the-duplicate-device-contacts-in-ios) – iOS

1

사용이 간단한 확장을, 당신이 정말로 recordID (기존 API에 대한) 읽을 필요가있는 경우 : 당신이 identifier이있을 때 다음이 당신이해야 할 것입니다.

recordID 항상 가져옵니다.

이 코드는 앱 스토어에 제출되지 않습니다. 그것은 비공개 API를 사용합니다!

CNContact+PrivateExtension.h :

NS_ASSUME_NONNULL_BEGIN 

@interface CNContact (PrivateExtension) 

@property (readonly) NSNumber *privateRecordID; 

@end 

NS_ASSUME_NONNULL_END 

CNContact+PrivateExtension.m :

@implementation CNContact (PrivateExtension) 

- (NSNumber *)privateRecordID 
{ 
    return [self valueForKey:@"recordID"]; 
} 

@end 
+0

iOS 11 베타에서 사용 했습니까? ?, iOS 11의 CNContact 개체에서 valueForKey : @ "recordID"를 사용하면 충돌이 발생하고 "이 클래스는 키 recordID에 대해 코드 호환 키 값이 아닙니다."라는 메시지가 표시됩니다. Apple이 ABAddressBook 속성에 대한 지원을 중단 한 것처럼 –