2016-07-19 11 views
0

フィルタなしですべての連絡先とそのキーのすべての情報を取得します。新しい連絡先フレームワークを使用して、すべての連絡先とすべてのキーを取得します。

func unifiedContactsMatchingPredicate(_ predicate: NSPredicate, 
          keysToFetch keys: [CNKeyDescriptor]) throws -> [CNContact] 

私は上記の方法で連絡先を取得しています。

私はすべてのキーを指定する必要がありますか? は、すべてを指定せずにすべてのキー情報を取得するショートカットです。

答えて

0

いいえ、必要なキーはすべて自分で指定する必要があります。リンゴのドキュメントを見てくださいhere ** EDIT:

-(void)getAllContacts 
{ 
    //keys with fetching properties 
    NSArray *keys = @[CNContactFamilyNameKey, CNContactGivenNameKey, CNContactPhoneNumbersKey, CNContactImageDataKey]; 
    NSString *containerId = store.defaultContainerIdentifier; 
    //to fetch all contacts 
    NSPredicate *predicate = [CNContact predicateForContactsInContainerWithIdentifier:containerId]; 

    //to fetch contacts with matching name 
// NSPredicate *predicate = [CNContact predicateForContactsMatchingName:@"vishal"]; 
    NSError *error; 
    NSArray *cnContacts = [store unifiedContactsMatchingPredicate:predicate keysToFetch:keys error:&error]; 
    if (error) { 
     NSLog(@"error fetching contacts %@", error); 
    } else { 
     for (CNContact *contact in cnContacts) { 
      // copy data to my custom Contacts class. 
      Contact *newContact = [[Contact alloc] init]; 
      newContact.firstName = contact.givenName; 
      newContact.lastName = contact.familyName; 
      UIImage *image = [UIImage imageWithData:contact.imageData]; 
      newContact.image = image; 
      for (CNLabeledValue *label in contact.phoneNumbers) { 
       NSString *phone = [label.value stringValue]; 
       if ([phone length] > 0) { 
        [newContact.phones addObject:phone]; 
       } 
      } 
      [contacts addObject:newContact]; 
     } 
    } 
} 
+0

と述語について私はそれを指定しておく必要があり..is:**この方法を試してみてください?私はすべての連絡先を欲しい。 – commando24

+0

データをフィルタリングする場合は、述語を使用できます。 ( "CNContactGivenNameKey、CNContactFamilyNameKey")これはName "XYZ"に一致する連絡先を返し、キーはCNContactGivenNameKeyとCNContactFamilyNameKeyになります。 –

+0

私はこれを知っていますが、私は何を求めているのは連絡先を "すべて"取り出すことです。 – commando24

関連する問題