iOS - 如何在ios6中实现自己创建的委托

时间:2013-03-11 06:13:37

标签: ios objective-c delegates

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

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

先谢谢, 阿伦。

4 个答案:

答案 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)

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

  1. 在第二个视图控制器中设置委托  vedViewObject.delegate = self;
  2. 您在委托中添加了displayAccounts方法并调用了display方法,这可能会导致问题。如果在委托类中没有实现这些方法。
  3. 添加条件如:if(delegate)[delegate displayAccounts:jsonResponse];