Macos 如何观察ABPerson查看ABPerson的更改

Macos 如何观察ABPerson查看ABPerson的更改,macos,addressbook,abaddressbook,osx-elcapitan,abperson,Macos,Addressbook,Abaddressbook,Osx Elcapitan,Abperson,我知道ABPersonView不是KVO的投诉。我的问题是,尽管ABPersonView的声明属性在每次访问该属性时都被保留,但我得到的却是不同的对象。我是否做错了什么,或者每次在ABPersonView中发生更改时,我都必须用新的ABPerson对象更新模型,这是正确的吗?使用El Capitan GM ABPersonView: @property (readwrite, retain) ABPerson *person; // An ABPerson record for display.

我知道ABPersonView不是KVO的投诉。我的问题是,尽管ABPersonView的声明属性在每次访问该属性时都被保留,但我得到的却是不同的对象。我是否做错了什么,或者每次在ABPersonView中发生更改时,我都必须用新的ABPerson对象更新模型,这是正确的吗?使用El Capitan GM

ABPersonView:

@property (readwrite, retain) ABPerson *person;
// An ABPerson record for display.
// Raises if person originates from ABAddressBook's +sharedAddressBook.
// Person must be exist in an ABAddressBook created and manipulated on the main thread only.
// When person is nil, displays an empty selection state. 
代码:

编辑: 新对象来自不同的addressBook实例:

(lldb) po [newPerson addressBook]
<ABAddressBook: 0x6080000d50e0>

(lldb) po self.book
<ABAddressBook: 0x6080000c4130>

(lldb) po [self.person addressBook]
<ABAddressBook: 0x6080000c4130>

不幸的是,每次调用personView的person属性都会触发将CNContact转换为ABPerson的ABPersonViewAPIAdapter。因此,如果一个人不想在El Capitan上使用CNContact,他必须将编辑的ABPerson传播回模型对象

您可以尝试以下代码(希望这能为其他人节省一些时间)


我只是独立地发现了同样的事情。老实说,我想不出一种方法来创建一个新的人,并将其保存在El Capitan和更高版本中已损坏的AddressBook UI视图中。沙箱又来了!
(lldb) po [newPerson addressBook]
<ABAddressBook: 0x6080000d50e0>

(lldb) po self.book
<ABAddressBook: 0x6080000c4130>

(lldb) po [self.person addressBook]
<ABAddressBook: 0x6080000c4130>
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc addObserver:self selector:@selector(changeOccured:) name:kABDatabaseChangedNotification object:nil];
[nc addObserver:self selector:@selector(changeOccured:) name:kABDatabaseChangedExternallyNotification object:nil];
  NSLog(@"%@",[self.personView performSelector:@selector(addressBook) withObject:nil]);
  NSLog(@"%@",[self.personView performSelector:@selector(_APIAdapter) withObject:nil]);
  NSLog(@"%@",[self.personView performSelector:@selector(_contact) withObject:nil]);