我正在尝试在视图中使用一些代码。我已经宣布了一个委托,它没有得到实例化,任何想法我缺少什么? 我试图总结一下我在下面的做法。我认为问题在于某处,我的dataSource委托需要实例化。
我有一个名为graph视图的视图和一个位于viewcontroller GraphViewController中的委托。
我知道GraphView中的方法正在做一些事情,因为它调用AxisDrawing助手类并绘制Axes。
以下是相关代码
在GraphView.h中,我设置了协议和dataSourceDelegate
@class GraphView;
@protocol GraphViewDataSourceDelegate
- (float)functionOfX:(float)xValue inGraphView:(GraphView *)sender;
@end
@interface GraphView : UIView
@property(nonatomic, weak) IBOutlet id <GraphViewDataSourceDelegate> dataSourceDelegate;
@end
我在GraphView.m中合成
#import "GraphView.h"
#import "AxesDrawer.h"
@implementation GraphView
@synthesize dataSourceDelegate = _dataSourceDelegate;
同样在图表视图中,我尝试使用委托如下(像素是CGPoint)。这个例程运行,我可以从这里绘制到GraphView,前提是我不尝试使用我的协议方法。即我绘制了一些DrawRect内容,它会检查UIView与我的自定义视图的链接
pixel.y = [self.dataSourceDelegate functionOfX:pixel.x inGraphView:self];
++++断点放在这里+++++
在GraphViewController中,我声明我实现了协议并按如下方式实现。编译器警告我并在执行完成时发现警告。 (我现在只返回3.0作为测试)。
@interface
GraphViewController () <GraphViewDataSourceDelegate>
@property (nonatomic, weak) IBOutlet GraphView *graphView;
@end
...
-(float) functionOfX:(float)xValue inGraphView:(GraphView *)sender{
NSLog(@"fofx accessed");
return 3.0;
}
如果我在断点之后查看GraphView *对象,它似乎没有实例。我错过了什么。
这是来自断点处的痕迹
_dataSourceDelegate struct objc_object * 0x0
编辑:(除@Clays以下答案)
事实证明,我与自定义视图的连接已中断。这意味着错误在于View不与Custom ViewController交谈。链接是通过从“界面”构建器中的“视图控制器”按钮拖动到ViewController中的“视图”来实现的。
这导致ViewController被实例化,然后一切正常。
换句话说。
有问题的链接是Outlet。这必须在ViewController中作为属性声明,然后使用ctrl在IB中链接从ViewController Name-Bar拖动到Controller中的View。
如果您正确添加了Outlet属性,当您执行ctrl拖动时,您的视图将显示一个选项。
IB中ViewController按钮的上下文按钮弹出信息确实提供了线索。
如果您忽略了将outlet属性放入视图控制器,则链接确实会出现在上下文按钮弹出窗口中,但它显示为灰色,当您执行链接时,您的视图未命名。
将插座插入后,名称会显示在菜单中,但不会显示为灰色。
答案 0 :(得分:1)
确保您已正确连接所有内容:设置GraphView的dataSourceDelegate和GraphViewController的graphView。
从痕迹看起来你没有那样做;或者你在某个地方失去了参考,因为在某些时候没有任何东西可以保留它。