2

我正在使用ABNewPersonViewController. 我将完成按钮(rightBarButtonItemABNewPersonViewController)保存到另一个按钮,以便委托方法

- (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];
}

在另一个视图中单击按钮我触发完成按钮操作

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

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

编辑:发现加载新视图时不会触发委托方法。只有在编辑 Country、Ringtone 等字段时才会发生这种情况(加载新视图)。那是没有触发委托方法的时候。在所有其他情况下,委托方法都会被触发。现在有什么建议吗?

4

2 回答 2

2

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

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

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

  • self.defaultRightBarButtonItem或者self.defaultRightBarButtonItem.targetnil
  • self.defaultRightBarButtonItem.actionnil

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

于 2012-03-21T13:58:59.403 回答
0

我的 2 美分:问题代码中没有任何内容表示错误。但是为什么要这么迂回调用保存方法(在保存按钮的目标上执行保存按钮的操作)。怎么样:

[self saveAction:nil];
于 2012-03-24T14:40:06.070 回答