objective-c - 委托(delegate)问题

标签 objective-c ios delegates

我不明白为什么我无法设置委托(delegate)。我正在使用 UINavigationController 在两个 View 之间切换。这是我的代码

SecondViewProtocol.h

#import <Foundation/Foundation.h>

@protocol SecondViewProtocol <NSObject>
    @required
    -(void)textFieldDidChange:(NSString *)data;
@end

SecondView.h

#import <UIKit/UIKit.h>
#import "SecondViewProtocol.h"
@interface SecondView : UIViewController

@property (nonatomic, retain) id<SecondViewProtocol>delegate;
@end

第二 View .m

@synthesize delegate = _delegate;
.......

-(IBAction)textFieldReturn:(id)sender
{
    [[self delegate] textFieldDidChange:[self.textField text]];
}

.......

我已在 FirstView.h 中导入 SecondViewProtocol.h

FirstView.m

....
SecondView *secondView = [[SecondView alloc]init];
secondView.delegate = self;
....

这里我得到了Assigning to id from incompromed type FirtView。

这里出了什么问题?

最佳答案

首先,委托(delegate)属性应声明为assign,而不是retain。你永远不应该保留委托(delegate)。 其次,FirstView 应符合 SecondViewProtocol,如下所示。

@interface FirstView: UIViewController <SecondViewProtocol>

关于objective-c - 委托(delegate)问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9452257/

相关文章:

ios - 如何在 ViewController 之间传递 UIButton 的框架和原点

Objective-C:将图像与之前保存的另一张图像进行比较

ios - 如何 swift 从 parent 那里解雇一个弹出窗口

ios - 如何在 View Controller 中触发协议(protocol)功能?

ios - 具有附件 View 高度问题的 iPhone 键盘

iphone - 当 Controller 消失时,如何防止 NSFetchedResultsController 更新 tableview?

ios - 在 Apple Watch 的 "ExtensionDelegate"设置 rootInterfaceController

ios - 无法打开文件 “***.app”,因为您没有查看它的权限

ios - 指定时间后切换 View

unit-testing - 如何在最小起订量中模拟委托(delegate)