Я пытаюсь отобразить CNContact на новом CNContactViewController. У меня не выбрана карта. Я попробовал это с несохраненным контактом (не идет). Также пробовал с сохраненным + извлеченным из CNContactStore, тоже не работает. Пробовал с контактом "я", но тот же результат. Согласно отладчику, выбранный контакт загружается с правильными значениями и не является нулевым/пустым. Приложение находится в песочнице и правильно запрашивает разрешение контактов.
Вот образец:
#import <Contacts/Contacts.h>
#import <ContactsUI/ContactsUI.h>
#import "AppDelegate.h"
@interface AppDelegate ()
@property (weak) IBOutlet NSWindow *window;
@property (strong) CNContact *contact;
@property (strong) CNContactViewController *controller;
@end
@implementation AppDelegate
- (instancetype)init {
self = [super init];
if (self) {
_controller = [[CNContactViewController alloc] init];
}
return self;
}
- (void)awakeFromNib
{
CNContactStore *store = [[CNContactStore alloc] init];
CNMutableContact *mutContact = [[CNMutableContact alloc] init];
NSString *identifier = [mutContact identifier];
mutContact.givenName = @"GivenName";
mutContact.familyName = @"FamilyName";
CNSaveRequest *saveRequest = [[CNSaveRequest alloc] init];
[saveRequest addContact:mutContact toContainerWithIdentifier:[store defaultContainerIdentifier]];
[store executeSaveRequest:saveRequest error:nil];
id keysToFetch = @[[CNContactViewController descriptorForRequiredKeys]];
_contact = [store unifiedContactWithIdentifier:identifier keysToFetch:keysToFetch error:nil];
dispatch_async(dispatch_get_main_queue(), ^{
self.controller.contact = self.contact;
self.window.contentViewController = self.controller;
self.window.contentView = self.controller.view;
});
}
@end
РЕДАКТИРОВАТЬ: 6 октября 2015 г.
Apple TSI подтвердила, что они не могут заставить его работать на OS X 10.11.0.