iphone - 触发按钮操作时不会调用 ABNewPersonViewController 委托(delegate)方法

标签 iphone ios abpersonviewcontroller

我正在使用ABNewPersonViewController。 我将“ABNewPersonViewController”的“完成”按钮(rightBarButtonItem of ABNewPersonViewController)保存到另一个按钮,以便委托(delegate)方法

- (void)newPersonViewController:(ABNewPersonViewController *)newPersonViewController didCompleteWithNewPerson:(ABRecordRef)person 

在按下完成按钮之前不会被调用。我的 viewDidLoad 方法如下

- (void)viewDidLoad {
[super viewDidLoad];


self.defaultRightBarButtonItem = self.navigationItem.rightBarButtonItem;

UIBarButtonItem *saveBtn = [[UIBarButtonItem alloc] 
                            initWithBarButtonSystemItem:UIBarButtonSystemItemSave 
                            target:self 
                            action:@selector(actionSave:)];
self.navigationItem.rightBarButtonItem = saveBtn;
[saveBtn release];
}

在另一个 View 中单击按钮时,我触发完成按钮操作

[self.defaultRightBarButtonItem.target 
 performSelector:self.defaultRightBarButtonItem.action
 withObject:self.defaultRightBarButtonItem.target];

有时该方法会被调用,有时则不起作用。 如果我只是编辑联系人的电子邮件地址字段或电话号码字段并尝试保存它,则会调用该方法。但是,如果我尝试编辑地址字段然后保存,则不会调用该方法。这可能是什么原因。

编辑:发现加载新 View 时不会触发委托(delegate)方法。仅当国家/地区、铃声等字段被编辑时才会发生这种情况(加载新 View )。那是委托(delegate)方法没有被触发的时候。在所有其他情况下,都会触发委托(delegate)方法。现在有什么建议吗?

最佳答案

performSelector 相当于调用它所发送到的对象的方法。如果执行进入“在另一个 View 中单击按钮”处理程序并执行

[self.defaultRightBarButtonItem.target 
 performSelector:self.defaultRightBarButtonItem.action
 withObject:self.defaultRightBarButtonItem.target];

代码,但反过来它永远不会进入操作中定义的选择器,只有以下情况是可能的:

  • self.defaultRightBarButtonItemself.defaultRightBarButtonItem.targetnil
  • self.defaultRightBarButtonItem.actionnil

尝试直接调用 actionSave: 方法并记录上面的所有字段,而不是 performSelector

关于iphone - 触发按钮操作时不会调用 ABNewPersonViewController 委托(delegate)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9741339/

相关文章:

ios - 图像在循环动画中移动 - Swift

ios - NavigationBar 宽度在页面 View Controller 中随机加倍

ios - 在 iOS 中将 CIFilter 应用于视频

ios - 用标签按颜色匹配两个图像数组

iphone - iPhone Contact app 的 detailView 是如何实现的

iphone - 如何将长 NSString 拆分为页面

iphone - objective-c 中的属性。复制并保留

ios - Swift 3 多线程使用哪个队列?

iphone - ABPersonViewController+删除

ios - 如何在 iOS 中使用 AddressBook 获取联系人的创建日期