联系人未在设备上显示

时间:2015-04-15 10:45:09

标签: ios iphone swift

大家好,我在抓取用户联系人时遇到问题。我为它写了一些代码,它在模拟器中正常工作,显示用户名和数字。现在,当我在设备上测试时,没有任何内容出现。请看我的代码有什么问题。

#import <AddressBookUI/AddressBookUI.h>
#import <Contacts/Contacts.h>

我在.H文件中导入这些内容,这里是.M

的代码
    CNContactStore *store = [[CNContactStore alloc] init];
[store requestAccessForEntityType:CNEntityTypeContacts completionHandler:^(BOOL granted, NSError * _Nullable error) {
    if (granted == YES) {
        //keys with fetching properties
        NSArray *keys = @[CNContactFamilyNameKey, CNContactGivenNameKey, CNContactPhoneNumbersKey, CNContactImageDataKey];
        NSString *containerId = store.defaultContainerIdentifier;
        NSPredicate *predicate = [CNContact predicateForContactsInContainerWithIdentifier:containerId];
        NSError *error;
        NSArray *cnContacts = [store unifiedContactsMatchingPredicate:predicate keysToFetch:keys error:&error];
        if (error) {
            NSLog(@"error fetching contacts %@", error);
        } else {
            for (CNContact *contact in cnContacts) {

                NSLog(@"print contacts %@",contact.givenName);

                for (CNLabeledValue *label in contact.phoneNumbers) {
                    NSString *phone = [label.value stringValue];
                    if ([phone length] > 0) {

                        NSLog(@"Print Phone no %@",phone);

                    }
                }
            }
        }
    }
}];

它在模拟器中工作正常,但它不能在我的设备上工作请帮助。

1 个答案:

答案 0 :(得分:4)

简短回答:不。

答案很长:不,iOS上的所有应用都运行在Sandbox中,这意味着他们只能访问自己“工作区”中的文件和文件夹。 iOS 8带来了共享容器,应用程序可以使用这些容器在它们之间共享文档和文件,但这只扩展到同一“应用程序组”中的应用程序,通常是应用程序及其扩展。这意味着您无法访问其他应用程序的文件,除非通过共享扩展程序明确向您提供这些文件。由于此扩展是在用户请求时调用的,因此应用程序无法在后台传递这些文件,当然也不会在卸载时传递这些文件。卸载应用程序时,iOS会自动提示用户文档/数据将丢失,但网络存储的数据/文档可能仍然可用。

有关文件系统沙箱的更多信息:Apple Doc's

iOS8文档提供程序 - Accessing Files Outside Your Sandbox - 这是用户启动的进程。