2016-11-14 41 views
3

這是我的代碼來獲取設備的聯繫人並保存到MutableArray如何從CNContactStore獲得RecordID ios

但我需要單獨獲取所有聯繫人的recordID並保存到相同的陣列中以備後用。 (例如,使用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接觸從通訊錄。當你有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 [鏈接](http://stackoverflow.com/questions/40613589/how-to-merger-the-duplicate-device-contacts-in-ios) – iOS

1

使用這種簡單的擴展,如果你真的需要閱讀recordID(舊API)。

recordID總是被提取。

此代碼從不提交到App Store。它使用私人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 beta上使用過?,在iOS 11的CNContact對象上使用valueForKey:@「recordID」崩潰並給出消息「此類不是關鍵記錄ID的關鍵字值編碼。」就好像Apple放棄了對ABAddressBook屬性的支持一樣 –