我正在尝试在视图中获取一些代码。我已经声明了一个委托并且它没有被实例化,任何想法我错过了什么?我试图在下面总结我是如何做到这一点的。我认为问题在于某个地方,我的 dataSource 委托需要被实例化。
我有一个名为图形视图的视图和一个位于视图控制器 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 结构 objc_object * 0x0
编辑:(除了下面的@Clays答案)
事实证明,我与自定义视图的连接中断了。这意味着错误在于 View 没有与 Custom ViewController 对话。该链接是通过 ctrl 从 Interface builder 中的 View Controller 按钮拖动到 ViewController 中的 View 来建立的。
这导致 ViewController 被实例化,然后一切正常。
换一种方式。
有问题的链接是奥特莱斯。这必须在 ViewController 中声明为属性,然后在 IB 中使用 ctrl 从 ViewController Name-Bar 拖动到 Controller 中的视图。
如果您已正确添加 Outlet 属性,当您执行 ctrl 拖动时,您的视图将出现一个选项。
IB 中 ViewController 按钮上的上下文按钮弹出信息确实提供了线索。
如果您忽略了将 outlet 属性放入视图控制器中,则链接确实会出现在上下文按钮弹出窗口中,但它是灰色的,并且当您执行链接时,您的视图不会被命名。
放入插座后,名称会出现在菜单中,但不会灰显。