当点击完成按钮应用程序崩溃并发出程序收到信号SIGABRT的消息时。
在ModalViewController.h委托的协议和方法
@protocol ModalViewDelegate <NSObject>
-(void) dismissModalView:(UIViewController *) viewController;
@end
@interface Infoviewcontroller : UIViewController <ModalViewDelegate>
{
id<ModalViewDelegate> dismissDelegate;
}
@property (nonatomic, retain) id<ModalViewDelegate> dismissDelegate;
@end
在modalviewcontroller中。 m档
@synthesize dismissDelegate;
-(void) dismissModalView:(UIViewController *) viewController;
{
[self dismissModalViewControllerAnimated:YES];
}
@end
完成按钮定义
UIButton* backButton = [UIButton buttonWithType:101];
[backButton addTarget:self action:@selector(dismissView:) forControlEvents:UIControlEventTouchUpInside];
[backButton setTitle:@"Done" forState:UIControlStateNormal];
// create button item
UIBarButtonItem* backItem = [[UIBarButtonItem alloc] initWithCustomView:backButton];
// add the button to navigation bar
self.navigationItem.leftBarButtonItem = backItem;
[backItem release];
-(void) dismissView: (id)sender
{
[UIViewController dismissDelegate];
}
当点击完成按钮应用程序崩溃并发出程序收到信号SIGABRT的消息时。所以我认为我在完成按钮的dismissView方法中做错了,这就是为什么它给出消息UIViewController dismissDelegate无法识别的选择器
帮助将不胜感激。
由于
答案 0 :(得分:3)
你在UIViewController上调用一个不存在的类方法(dismissDelegate - 你已经定义为Infoviewcontroller的一个属性)。
我觉得你对使用ModalViewDelegate感到有些困惑,让我试着解释......
在Apple View Controller编程指南中,建议显示模态控制器的ViewController负责解除它。因此,您需要一种方式让模态控制器与呈现控制器通信。
所以...你的演示控制器应该符合你的ModalViewDelegate协议(而不是你在这里的模态控制器)。
当您呈现模态视图控制器时,将其委托设置为self(自身为呈现视图控制器)。
你的dismissView方法应该是:
-(void) dismissView: (id)sender
{
[self.dismissDelegate dismissModalView:self];
}
实际上,您可能甚至不需要将UIViewController参数传递给委托,因为您最终不会使用它。
最后,你的dismissDelegate属性确实不应该被保留,而是应该分配它(否则你最终会得到一个循环保留关系)。
答案 1 :(得分:0)
试试这个:
-(void) dismissView: (id)sender
{
[self dismissModalViewControllerAnimated:YES];
}