CNContactStore

Struct CNContactStore 

Source
#[repr(C)]
pub struct CNContactStore { /* private fields */ }
Available on crate feature CNContactStore only.
Expand description

Provides methods to fetch and save contacts.

The CNContactStore is a thread safe class that can fetch and save contacts, fetch and save groups, and fetch containers.

Note: Some good practices are:

  1. Only fetch contact properties that will be used.
  2. When fetching all contacts and caching the results, first fetch all contact identifiers only. Then fetch batches of detailed contacts by identifiers as you need them.
  3. To aggregate several contact fetches collect a set of unique contact identifiers from the fetches. Then fetch batches of detailed contacts by identifiers.
  4. When CNContactStoreDidChangeNotification is posted, if you cache any fetched contacts/groups/containers then they must be refetched and the old cached objects released.

See also Apple’s documentation

Implementations§

Source§

impl CNContactStore

Source

pub unsafe fn authorizationStatusForEntityType( entity_type: CNEntityType, ) -> CNAuthorizationStatus

Indicates the current authorization status to access contact data.

Based upon the access, the application could display or hide its UI elements that would access any Contacts API. This method is thread safe.

Returns: Returns the authorization status for the given entityType.

Source

pub unsafe fn requestAccessForEntityType_completionHandler( &self, entity_type: CNEntityType, completion_handler: &DynBlock<dyn Fn(Bool, *mut NSError)>, )

Available on crate feature block2 only.

Request access to the user’s contacts.

Users are able to grant or deny access to contact data on a per-application basis. To request access to contact data, call requestAccessForEntityType:completionHandler:. This will not block the application while the user is being asked to grant or deny access. The user will only be prompted the first time access is requested; any subsequent CNContactStore calls will use the existing permissions. The completion handler is called on an arbitrary queue.

Note: Recommended to use CNContactStore instance methods in this completion handler instead of the UI main thread. This method is optional when CNContactStore is used on a background thread. If it is not used in that case, CNContactStore will block if the user is asked to grant or deny access.

Parameter entityType: Set to CNEntityTypeContacts.

Parameter completionHandler: This block is called upon completion. If the user grants access then granted is YES and error is nil. Otherwise granted is NO with an error.

Source

pub unsafe fn unifiedContactsMatchingPredicate_keysToFetch_error( &self, predicate: &NSPredicate, keys: &NSArray<ProtocolObject<dyn CNKeyDescriptor>>, ) -> Result<Retained<NSArray<CNContact>>, Retained<NSError>>

Available on crate feature CNContact only.

Fetch all unified contacts matching a given predicate.

Use only predicates from CNContact+Predicates.h. Compound predicates are not supported. Due to unification the returned contacts may have a different identifier.

Note: To fetch all contacts use enumerateContactsWithFetchRequest:error:usingBlock:.

Parameter predicate: The predicate to match against.

Parameter keys: The properties to fetch into the returned CNContact objects. Should only fetch the properties that will be used. Can combine contact keys and contact key descriptors.

Parameter error: If an error occurs, contains error information.

Returns: An array of CNContact objects matching the predicate. If no matches are found, an empty array is returned. If an error occurs, nil is returned.

Source

pub unsafe fn unifiedContactWithIdentifier_keysToFetch_error( &self, identifier: &NSString, keys: &NSArray<ProtocolObject<dyn CNKeyDescriptor>>, ) -> Result<Retained<CNContact>, Retained<NSError>>

Available on crate feature CNContact only.

Fetch a unified contact with a given identifier.

Due to unification the returned contact may have a different identifier. To fetch a batch of contacts by identifiers use [CNContact predicateForContactsWithIdentifiers:].

Parameter identifier: The identifier of the contact to fetch.

Parameter keys: The properties to fetch into the returned CNContact object. Should only fetch the properties that will be used. Can combine contact keys and contact key descriptors.

Parameter error: If an error occurs, contains error information.

Returns: The unified contact matching or linked to the identifier. If no contact with the given identifier is found, nil is returned and error is set to CNErrorCodeRecordDoesNotExist.

Source

pub unsafe fn unifiedMeContactWithKeysToFetch_error( &self, keys: &NSArray<ProtocolObject<dyn CNKeyDescriptor>>, ) -> Result<Retained<CNContact>, Retained<NSError>>

Available on crate feature CNContact only.

Fetch the unified contact that is the “me” card.

Fetches the contact that is represented in the user interface as “My Card”.

Parameter keys: The properties to fetch into the returned CNContact object. Should only fetch the properties that will be used. Can combine contact keys and contact key descriptors.

Parameter error: If an error occurs, contains error information.

Returns: The unified contact that is the “me” card. If no “me” card is set, nil is returned.

Source

pub unsafe fn enumeratorForContactFetchRequest_error( &self, request: &CNContactFetchRequest, ) -> Result<Retained<CNFetchResult<NSEnumerator<CNContact>>>, Retained<NSError>>

Available on crate features CNContact and CNContactFetchRequest and CNFetchRequest and CNFetchResult only.

Enumerate a contact fetch request.

Executes the given fetch request and returns an enumerator for the results. This may prevent all records from being loaded into memory at once.

An exception may be thrown if an error occurs during enumeration.

Parameter request: A description of the records to fetch.

Parameter error: If the fetch fails, contains an NSErrorobject with more information.

Returns: An enumerator of the records matching the result, or nilif there was an error.

Source

pub unsafe fn enumeratorForChangeHistoryFetchRequest_error( &self, request: &CNChangeHistoryFetchRequest, ) -> Result<Retained<CNFetchResult<NSEnumerator<CNChangeHistoryEvent>>>, Retained<NSError>>

Available on crate features CNChangeHistoryEvent and CNChangeHistoryFetchRequest and CNFetchRequest and CNFetchResult only.

Enumerate a change history fetch request.

Executes the given fetch request and returns an enumerator for the results. This may prevent all events from being loaded into memory at once.

An exception may be thrown if an error occurs during enumeration.

Parameter request: A description of the events to fetch.

Parameter error: If the fetch fails, contains an NSErrorobject with more information.

Returns: An enumerator of the events matching the result, or nilif there was an error.

Source

pub unsafe fn enumerateContactsWithFetchRequest_error_usingBlock( &self, fetch_request: &CNContactFetchRequest, error: Option<&mut Option<Retained<NSError>>>, block: &DynBlock<dyn Fn(NonNull<CNContact>, NonNull<Bool>) + '_>, ) -> bool

Available on crate features CNContact and CNContactFetchRequest and CNFetchRequest and block2 only.

Enumerates all contacts matching a contact fetch request.

This method will wait until the enumeration is finished. If there are no results, the block is not called and YES is returned.

Parameter fetchRequest: The contact fetch request that specifies the search criteria.

Parameter error: If an error occurs, contains error information.

Parameter block: Called for each matching contact. Set *stop to YES to stop the enumeration.

Returns: YES if successful, otherwise NO.

Source

pub unsafe fn groupsMatchingPredicate_error( &self, predicate: Option<&NSPredicate>, ) -> Result<Retained<NSArray<CNGroup>>, Retained<NSError>>

Available on crate feature CNGroup only.

Fetch all groups matching a given predicate.

Use only predicates from CNGroup+Predicates.h. Compound predicates are not supported.

Parameter predicate: The predicate to match against. Set to nil to match all groups.

Parameter error: If an error occurs, contains error information.

Returns: An array of CNGroup objects matching the predicate. If no matches are found, an empty array is returned. If an error occurs, nil is returned.

Source

pub unsafe fn containersMatchingPredicate_error( &self, predicate: Option<&NSPredicate>, ) -> Result<Retained<NSArray<CNContainer>>, Retained<NSError>>

Available on crate feature CNContainer only.

Fetch all containers matching a given predicate.

Use only predicates from CNContainer+Predicates.h. Compound predicates are not supported.

Parameter predicate: The predicate to match against. Set to nil to match all containers.

Parameter error: If an error occurs, contains error information.

Returns: An array of CNContainer objects matching the predicate. If no matches are found, an empty array is returned. If an error occurs, nil is returned.

Source

pub unsafe fn executeSaveRequest_error( &self, save_request: &CNSaveRequest, ) -> Result<(), Retained<NSError>>

Available on crate feature CNSaveRequest only.

Executes a save request.

Do not access objects when save request is executing. A save request with contacts may modify the contacts while executing. A save request only applies the changes to the objects. If there are overlapping changes with multiple, concurrent CNSaveRequests then the last saved change wins.

Parameter saveRequest: Save request to execute.

Parameter error: If an error occurs, contains error information.

Returns: YES if successful, otherwise NO.

Source

pub unsafe fn currentHistoryToken(&self) -> Option<Retained<NSData>>

The current history token.

Retrieve the current history token. If you are fetching contacts or change history events, you should use the token on the CNFetchResultinstead.

Source

pub unsafe fn defaultContainerIdentifier(&self) -> Retained<NSString>

The identifier of the default container.

This identifier can be used to fetch the default container.

Returns: The identifier of the default container. If the caller lacks Contacts authorization or an error occurs, nil is returned.

Source§

impl CNContactStore

Methods declared on superclass NSObject.

Source

pub unsafe fn init(this: Allocated<Self>) -> Retained<Self>

Source

pub unsafe fn new() -> Retained<Self>

Methods from Deref<Target = NSObject>§

Source

pub fn doesNotRecognizeSelector(&self, sel: Sel) -> !

Handle messages the object doesn’t recognize.

See Apple’s documentation for details.

Methods from Deref<Target = AnyObject>§

Source

pub fn class(&self) -> &'static AnyClass

Dynamically find the class of this object.

§Panics

May panic if the object is invalid (which may be the case for objects returned from unavailable init/new methods).

§Example

Check that an instance of NSObject has the precise class NSObject.

use objc2::ClassType;
use objc2::runtime::NSObject;

let obj = NSObject::new();
assert_eq!(obj.class(), NSObject::class());
Source

pub unsafe fn get_ivar<T>(&self, name: &str) -> &T
where T: Encode,

👎Deprecated: this is difficult to use correctly, use Ivar::load instead.

Use Ivar::load instead.

§Safety

The object must have an instance variable with the given name, and it must be of type T.

See Ivar::load_ptr for details surrounding this.

Source

pub fn downcast_ref<T>(&self) -> Option<&T>
where T: DowncastTarget,

Attempt to downcast the object to a class of type T.

This is the reference-variant. Use Retained::downcast if you want to convert a retained object to another type.

§Mutable classes

Some classes have immutable and mutable variants, such as NSString and NSMutableString.

When some Objective-C API signature says it gives you an immutable class, it generally expects you to not mutate that, even though it may technically be mutable “under the hood”.

So using this method to convert a NSString to a NSMutableString, while not unsound, is generally frowned upon unless you created the string yourself, or the API explicitly documents the string to be mutable.

See Apple’s documentation on mutability and on isKindOfClass: for more details.

§Generic classes

Objective-C generics are called “lightweight generics”, and that’s because they aren’t exposed in the runtime. This makes it impossible to safely downcast to generic collections, so this is disallowed by this method.

You can, however, safely downcast to generic collections where all the type-parameters are AnyObject.

§Panics

This works internally by calling isKindOfClass:. That means that the object must have the instance method of that name, and an exception will be thrown (if CoreFoundation is linked) or the process will abort if that is not the case. In the vast majority of cases, you don’t need to worry about this, since both root objects NSObject and NSProxy implement this method.

§Examples

Cast an NSString back and forth from NSObject.

use objc2::rc::Retained;
use objc2_foundation::{NSObject, NSString};

let obj: Retained<NSObject> = NSString::new().into_super();
let string = obj.downcast_ref::<NSString>().unwrap();
// Or with `downcast`, if we do not need the object afterwards
let string = obj.downcast::<NSString>().unwrap();

Try (and fail) to cast an NSObject to an NSString.

use objc2_foundation::{NSObject, NSString};

let obj = NSObject::new();
assert!(obj.downcast_ref::<NSString>().is_none());

Try to cast to an array of strings.

use objc2_foundation::{NSArray, NSObject, NSString};

let arr = NSArray::from_retained_slice(&[NSObject::new()]);
// This is invalid and doesn't type check.
let arr = arr.downcast_ref::<NSArray<NSString>>();

This fails to compile, since it would require enumerating over the array to ensure that each element is of the desired type, which is a performance pitfall.

Downcast when processing each element instead.

use objc2_foundation::{NSArray, NSObject, NSString};

let arr = NSArray::from_retained_slice(&[NSObject::new()]);

for elem in arr {
    if let Some(data) = elem.downcast_ref::<NSString>() {
        // handle `data`
    }
}

Trait Implementations§

Source§

impl AsRef<AnyObject> for CNContactStore

Source§

fn as_ref(&self) -> &AnyObject

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl AsRef<CNContactStore> for CNContactStore

Source§

fn as_ref(&self) -> &Self

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl AsRef<NSObject> for CNContactStore

Source§

fn as_ref(&self) -> &NSObject

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl Borrow<AnyObject> for CNContactStore

Source§

fn borrow(&self) -> &AnyObject

Immutably borrows from an owned value. Read more
Source§

impl Borrow<NSObject> for CNContactStore

Source§

fn borrow(&self) -> &NSObject

Immutably borrows from an owned value. Read more
Source§

impl ClassType for CNContactStore

Source§

const NAME: &'static str = "CNContactStore"

The name of the Objective-C class that this type represents. Read more
Source§

type Super = NSObject

The superclass of this class. Read more
Source§

type ThreadKind = <<CNContactStore as ClassType>::Super as ClassType>::ThreadKind

Whether the type can be used from any thread, or from only the main thread. Read more
Source§

fn class() -> &'static AnyClass

Get a reference to the Objective-C class that this type represents. Read more
Source§

fn as_super(&self) -> &Self::Super

Get an immutable reference to the superclass.
Source§

impl Debug for CNContactStore

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Deref for CNContactStore

Source§

type Target = NSObject

The resulting type after dereferencing.
Source§

fn deref(&self) -> &Self::Target

Dereferences the value.
Source§

impl Hash for CNContactStore

Source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl Message for CNContactStore

Source§

fn retain(&self) -> Retained<Self>
where Self: Sized,

Increment the reference count of the receiver. Read more
Source§

impl NSObjectProtocol for CNContactStore

Source§

fn isEqual(&self, other: Option<&AnyObject>) -> bool
where Self: Sized + Message,

Check whether the object is equal to an arbitrary other object. Read more
Source§

fn hash(&self) -> usize
where Self: Sized + Message,

An integer that can be used as a table address in a hash table structure. Read more
Source§

fn isKindOfClass(&self, cls: &AnyClass) -> bool
where Self: Sized + Message,

Check if the object is an instance of the class, or one of its subclasses. Read more
Source§

fn is_kind_of<T>(&self) -> bool
where T: ClassType, Self: Sized + Message,

👎Deprecated: use isKindOfClass directly, or cast your objects with AnyObject::downcast_ref
Check if the object is an instance of the class type, or one of its subclasses. Read more
Source§

fn isMemberOfClass(&self, cls: &AnyClass) -> bool
where Self: Sized + Message,

Check if the object is an instance of a specific class, without checking subclasses. Read more
Source§

fn respondsToSelector(&self, aSelector: Sel) -> bool
where Self: Sized + Message,

Check whether the object implements or inherits a method with the given selector. Read more
Source§

fn conformsToProtocol(&self, aProtocol: &AnyProtocol) -> bool
where Self: Sized + Message,

Check whether the object conforms to a given protocol. Read more
Source§

fn description(&self) -> Retained<NSObject>
where Self: Sized + Message,

A textual representation of the object. Read more
Source§

fn debugDescription(&self) -> Retained<NSObject>
where Self: Sized + Message,

A textual representation of the object to use when debugging. Read more
Source§

fn isProxy(&self) -> bool
where Self: Sized + Message,

Check whether the receiver is a subclass of the NSProxy root class instead of the usual NSObject. Read more
Source§

fn retainCount(&self) -> usize
where Self: Sized + Message,

The reference count of the object. Read more
Source§

impl PartialEq for CNContactStore

Source§

fn eq(&self, other: &Self) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl RefEncode for CNContactStore

Source§

const ENCODING_REF: Encoding = <NSObject as ::objc2::RefEncode>::ENCODING_REF

The Objective-C type-encoding for a reference of this type. Read more
Source§

impl DowncastTarget for CNContactStore

Source§

impl Eq for CNContactStore

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<'a, T> AnyThread for T
where T: ClassType<ThreadKind = dyn AnyThread + 'a> + ?Sized,

Source§

fn alloc() -> Allocated<Self>
where Self: Sized + ClassType,

Allocate a new instance of the class. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> AutoreleaseSafe for T
where T: ?Sized,