0

我正在尝试在视图中获取一些代码。我已经声明了一个委托并且它没有被实例化,任何想法我错过了什么?我试图在下面总结我是如何做到这一点的。我认为问题在于某个地方,我的 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 属性放入视图控制器中,则链接确实会出现在上下文按钮弹出窗口中,但它是灰色的,并且当您执行链接时,您的视图不会被命名。

放入插座后,名称会出现在菜单中,但不会灰显。

4

1 回答 1

1

确保您已正确连接所有内容:设置 GraphView 的 dataSourceDelegate 和 GraphViewController 的 graphView。

从跟踪来看,您似乎还没有这样做;或者您在途中的某个地方丢失了参考,因为在某些时候没有任何东西可以抓住它。

于 2012-09-06T14:48:55.373 回答