1

我为我的项目创建了一个委托,我的主视图的代码是

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;

第二视图控制器.m

- (void)display:(NSString *)string
{

}

但是当我使用断点调试代码时,此代码无法正常工作,代码到达

[delegate display:abc];

但它不调用SecondViewController.m文件中的显示函数

我认为我的代码是正确的,但有一些我无法识别的错误

让我解释一下我的项目流程这可能是问题所在

默认情况下,VedantViewController 视图在单击显示按钮后启动,它会在视图中调用 SecondViewController 视图,这些是调用 VedantViewController 中的函数的列表按钮,此函数然后调用委托方法,即 [delegate display:jsonResponse];

在此先感谢,阿伦。

4

4 回答 4

0

与协议确认的视图控制器应该在 viewDidLoad 或您正在制作该 viewController 对象的任何地方都有这一行

在 SecondViewController.m 中添加这一行

VedantViewControllerObject.delegate = self;

于 2013-03-11T06:16:31.503 回答
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;
于 2013-03-11T06:21:16.117 回答
0

在您的VedantViewController.h文件中,您声明了如下方法

-(void)displayAccounts:(NSString *)JSONResponse;

但你在叫它[delegate display:jsonResponse];

你只是试着打电话

 [delegate displayAccounts:jsonResponse];

SecondViewController.m

(void)displayAccounts:(NSString *)string{

    }
于 2013-03-11T06:21:53.713 回答
0

您的代码中存在一些问题:

  1. 在第二个视图控制器中设置委托 vedViewObject.delegate = self;
  2. displayAccounts在委托和调用display方法中添加了方法,这可能会导致问题。如果该方法未在委托类中实现。
  3. 添加 if 条件,如:if(delegate)[delegate displayAccounts:jsonResponse];
于 2013-03-11T06:23:53.177 回答