我为我的项目创建了一个委托,我的主视图的代码是
VedantViewController.h
@protocol VedantDelegate;
@interface VedantViewController : UIViewController
{
id <VedantDelegate> delegate;
}
//some other outlets
@property(nonatomic, assign) id <VedantDelegate> delegate;
@protocol VedantDelegate <NSObject>
- (void)display:(NSString *)JSONResponse;
@end
VedantViewController.m
@synthesize delegate;
[delegate display:jsonResponse];
SecondViewController.h
@interface SecondViewController : UIViewController<VedantDelegate>
- (void)display:(NSString *)JSONResponse;
SecondViewController.m
- (void)display:(NSString *)string
{
}
但此代码无法正常运行 当我使用断点调试代码时,代码到达
[delegate display:abc];
但它不会在 SecondViewController.m 文件
中调用显示功能我认为我的代码是正确的,但有一些我无法识别的错误
让我向您解释一下我的项目流程可能是问题
默认启动VedantViewController视图 之后当单击show按钮时,它调用视图中的SecondViewController视图,这些是调用VedantViewController函数的list按钮,然后调用委托方法,即[delegate display:jsonResponse];
先谢谢, 阿伦。
答案 0 :(得分:0)
使用协议确认的视图控制器应该在viewDidLoad中或者您正在构建该viewController对象的任何地方使用此行
在SecondViewController.m中添加此行
VedantViewControllerObject.delegate = self;
答案 1 :(得分:0)
@protocol VedantDelegate;
@interface VedantViewController : UIViewController{
id<VedantDelegate> delegate;
}
//some other outlets
@property(nonatomic,assign) id<VedantDelegate> delegate;
@protocol VedantDelegate <NSObject>
-(void)displayAccounts:(NSString *)JSONResponse;
-(void)display:(NSString *)JSONResponse;
@end
并在SecondViewController类中将委托给VedantViewControllerObject类的对象设置为self,并且应该初始化和分配VedantViewControllerObject类的对象。
vedantViewControllerObject.delegate = self;
答案 2 :(得分:0)
在VedantViewController.h
文件中,您声明的方法如下
-(void)displayAccounts:(NSString *)JSONResponse;
但你称之为[delegate display:jsonResponse];
你只是试着打电话
[delegate displayAccounts:jsonResponse];
在 SecondViewController.m
中(void)displayAccounts:(NSString *)string{
}
答案 3 :(得分:0)
您的代码中存在一些问题:
displayAccounts
方法并调用了display
方法,这可能会导致问题。如果在委托类中没有实现这些方法。if(delegate)[delegate displayAccounts:jsonResponse];