【问题标题】:error: request for member 'bounds' in something not a structure or union错误:在不是结构或联合的东西中请求成员“界限”
【发布时间】:2009-10-19 21:00:05
【问题描述】:

使用 core-plot 框架编译 iPhone 应用程序时出现上述错误。我将此视图控制器的视图链接到 IB 中的 CPLayerHostingView。这是 viewDidLoad() 函数的示例代码。

- (void)viewDidLoad {
    [super viewDidLoad];

    graph = [[CPXYGraph alloc] initWithFrame: self.view.bounds];

    CPLayerHostingView *hostingView = (CPLayerHostingView *)self.view;
    hostingView.hostedLayer = graph;


    graph.paddingLeft = 20.0;
    graph.paddingTop = 20.0;
    graph.paddingRight = 20.0;
    graph.paddingBottom = 20.0;


    CPXYPlotSpace *plotSpace = (CPXYPlotSpace *)graph.defaultPlotSpace;
    plotSpace.xRange = [CPPlotRange plotRangeWithLocation:CPDecimalFromFloat(-6)
                                                   length:CPDecimalFromFloat(12)];
    plotSpace.yRange = [CPPlotRange plotRangeWithLocation:CPDecimalFromFloat(-5)
                                                   length:CPDecimalFromFloat(30)];

    CPLineStyle *lineStyle = [CPLineStyle lineStyle];
    lineStyle.lineColor = [CPColor blackColor];
    lineStyle.lineWidth = 2.0f;

    CPXYAxisSet *axisSet = (CPXYAxisSet *)graph.axisSet;
    axisSet.xAxis.majorIntervalLength = [[NSDecimalNumber decimalNumberWithString:@"5"] decimalValue];
    axisSet.xAxis.minorTicksPerInterval = 4;
    axisSet.xAxis.majorTickLineStyle = lineStyle;
    axisSet.xAxis.minorTickLineStyle = lineStyle;
    axisSet.xAxis.axisLineStyle = lineStyle;
    axisSet.xAxis.minorTickLength = 5.0f;
    axisSet.xAxis.majorTickLength = 7.0f;
    axisSet.xAxis.axisLabelOffset = 3.0f;

    axisSet.yAxis.majorIntervalLength = [[NSDecimalNumber decimalNumberWithString:@"5"] decimalValue];
    axisSet.yAxis.minorTicksPerInterval = 4;
    axisSet.yAxis.majorTickLineStyle = lineStyle;
    axisSet.yAxis.minorTickLineStyle = lineStyle;
    axisSet.yAxis.axisLineStyle = lineStyle;
    axisSet.yAxis.minorTickLength = 5.0f;
    axisSet.yAxis.majorTickLength = 7.0f;
    axisSet.yAxis.axisLabelOffset = 3.0f;

    CPScatterPlot *xSquaredPlot = [[[CPScatterPlot alloc] initWithFrame:graph.defaultPlotSpace.bounds] autorelease];
    xSquaredPlot.identifier = @"X Squared Plot";
    xSquaredPlot.dataLineStyle.lineWidth = 1.0f;
    xSquaredPlot.dataLineStyle.lineColor = [CPColor redColor];
    xSquaredPlot.dataSource = self;
    [graph addPlot:xSquaredPlot];

    CPPlotSymbol *greenCirclePlotSymbol = [CPPlotSymbol ellipsePlotSymbol];
    greenCirclePlotSymbol.fill = [CPFill fillWithColor:[CPColor greenColor]];
    greenCirclePlotSymbol.size = CGSizeMake(2.0, 2.0);

    [xSquaredPlot setPlotSymbol:greenCirclePlotSymbol];

    CPScatterPlot *xInversePlot = [[[CPScatterPlot alloc] initWithFrame:graph.defaultPlotSpace.bounds] autorelease];
    xInversePlot.identifier = @"X Inverse Plot";
    xInversePlot.dataLineStyle.lineWidth = 1.0f;
    xInversePlot.dataLineStyle.lineColor = [CPColor blueColor];
    xInversePlot.dataSource = self;
    [graph addPlot:xInversePlot];
}

问题线如下:

CPScatterPlot *xSquaredPlot = [[[CPScatterPlot alloc] initWithFrame:graph.defaultPlotSpace.bounds] autorelease];
CPScatterPlot *xInversePlot = [[[CPScatterPlot alloc] initWithFrame:graph.defaultPlotSpace.bounds] autorelease];

这是说 graph.defaultPlotSpace 没有“界限”。有人也遇到过这种情况吗?

【问题讨论】:

    标签: iphone uiview interface-builder core-plot


    【解决方案1】:

    用括号语法尝试这些调用。

    CPScatterPlot *xSquaredPlot = [[[CPScatterPlot alloc] initWithFrame:[[graph defaultPlotSpace] bounds]] autorelease];
    CPScatterPlot *xInversePlot = [[[CPScatterPlot alloc] initWithFrame:[[graph defaultPlotSpace] bounds]] autorelease];
    

    【讨论】:

      【解决方案2】:

      作为图形的 defaultPlotSpace 返回的 CPXYPlotSpace 是 CPPlotSpace 的子类,它只是 NSObject 的子类。这些类都没有定义边界属性。相反,CPXYPlotSpace 让您通过 CPPlotRange 对象设置范围,正如您在检索 defaultPlotSpace 后的前两行中看到的那样。

      做你想做的事情的正确方法是分配地块并只使用-init,而不是-initWithFrame:。当这些图被添加到图中时,我相信它们会根据绘图空间自动调整大小。或者,您可以使用 -initWithFrame: 并使用图形的框架。

      如果您想查看从 CPXYPlotSpace 返回边界的便捷方法,请在mailing list 中告诉我们。

      【讨论】:

      • 感谢您的信息,布拉德。我会在这里接受你的建议。我基本上从 switchonthecode.com 直接复制/粘贴,然后返回这些错误。方便的方法会很好,但如果我可以从图形对象中获取框架,则可能没有必要。
      • 不幸的是,框架上的 API 仍在不断发展,因此 switchonthecode.com 示例不再适用于当前版本的框架。需要进行一些细微的调整才能使其与当前的 API 保持一致。对此感到抱歉。
      【解决方案3】:

      如果没有包含 Quartzcore 框架,则通过添加 Quartzcore 框架来解决此错误的问题。

      【讨论】:

        猜你喜欢
        • 2016-04-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-27
        相关资源
        最近更新 更多