2016-11-14 5 views
3

これはデバイスの連絡先を取得してMutableArrayに保存するコードです。CNContactStoreからレコードIDを取得する方法

しかし、すべての連絡先について個別に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を持っている場合、これはあなたがする必要があるすべてです:あなたは本当に(旧APIのため)recordIDを読むために必要がある場合

- (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

アデルの仕事は完璧です。 重複した連絡先をマージする方法はありますか? – iOS

+0

必ず@InderpalSingh。私はあなたがこの記事の話題になるので、新しい質問をすることをお勧めします。コメントに新しい質問のリンクを追加することができます。 – Adeel

+0

はこちらです@Adeel [link](http://stackoverflow.com/questions/40613589/how-to-merger-the-duplicate-device-contacts-in-ios) – iOS

1

は、この単純な拡張機能を使用してください。

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ベータ版で使用しましたか?、iOS 11のCNContactオブジェクトのvalueForKey:@ "recordID"を使用してクラッシュし、「このクラスはキーのrecordIDに対応するキー値ではありません」というメッセージが表示されます。あたかもAppleがABAddressBookのプロパティをサポートしているかのように –

関連する問題