2009-10-19 6 views
0

core-plot 프레임 워크를 사용하여 iPhone 응용 프로그램을 컴파일 할 때 위의 오류가 발생합니다. IB의 CPLayerHostingView에 링크 된 뷰 컨트롤러의 뷰가 있습니다. 다음은 viewDidLoad() 함수의 샘플 코드입니다.오류 : 구조체 또는 공용체가 아닌 멤버 'bounds'요청

- (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로부터 '경계'가 없다 말하는. 아무도 이것에 빠지니?

답변

1

브래킷 구문을 사용하여 이러한 호출을 시도해보십시오.

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

다시 그래프의 defaultPlotSpace로지고있는 CPXYPlotSpace는 NSObject의 단지 서브 클래스 CPPlotSpace의 서브 클래스입니다. 이러한 클래스 중 어느 것도 bounds 속성을 정의하지 않습니다. 대신, CPXYPlotSpace는 defaultPlotSpace를 검색 한 후 처음 두 행에서 볼 수 있듯이 CPPlotRange 객체를 통해 범위를 설정합니다.

원하는 작업을 수행하는 적절한 방법은 플롯을 할당하고 -initWithFrame :이 아닌 -init를 사용하는 것입니다. 이 그래프가 그래프에 추가되면 그래프 공간에 따라 자동으로 크기가 조정됩니다. 또는, -initWithFrame :을 사용하고 그래프의 프레임을 사용할 수 있습니다.

CPXYPlotSpace에서 경계를 반환하는 편리한 방법을 보려면 mailing list에 알려주십시오.

+0

정보를 제공해 주셔서 감사합니다, Brad. 나는 너의 제안으로 여기 갈 것이다. 기본적으로 switchonthecode.com에서 직접 복사/붙여 넣기를 수행하고 이러한 오류가 발생했습니다. 그래프 개체에서 프레임을 대신 가져올 수 있다면 편리함이 좋지만 불필요한 방법 일 수 있습니다. –

+0

유감스럽게도 프레임 워크의 API는 계속 진화하고 있으므로 switch.comhecode.com 예제는 현재 프레임 워크의 현재 버전에서 더 이상 사용하지 않습니다. 현재 API를 사용하기 위해서는 약간의 조정이 필요합니다. 미안합니다. –

0

Quartzcore 프레임 워크가 포함되어 있지 않은 경우이 오류를 수정하면 문제가 해결됩니다.

관련 문제