2013-02-19 1 views
1

John Wordsworth 자습서 (http://www.johnwordsworth.com/2011/10/adding-charts-to-your-iphone-ipad-app-using-core-plot/)를 따라 CorePlot을 사용하여 선 그래프를 만들었습니다.다른 클래스에 정의 된 배열의 값을 사용하는 방법

나중에 그래프에 사용할 수 있도록 웹 사이트에서 일부 JSON 데이터를 가져 오기로 결정했습니다.

모든 URL 연결 방법은 내 ViewController.m 파일에서 수행됩니다. 거기서 모든 JSON 데이터를 포함하는 indicator이라는 NSArray를 만들었습니다.

내 문제는 내가 X 축 라벨을 사용자 정의 (ViewController.m에 정의) "indicator"문자열의 배열을 사용하고자하는 경우 그래프의 모든 매개 변수가 SimpleScatterPlot.m라는 별도의 NSObject의 클래스에 정의되어 있다는 점이다.

SimpleScatterPlot.m에서이 JSON 데이터 배열을 사용할 수 있도록하려면 어떻게해야합니까?
나는 #import "ViewController.h"을 시도했지만 해결하지 못했습니다.

미리 알려 주시면 감사하겠습니다.

+0

당신은 그것을 읽기 'SimpleScatterView' – nsgulliver

+0

http://en.wikipedia.org/wiki/Objective-C 년에 바르 액세스하기 위해 viewController''의 인스턴스를 생성해야합니다. 당신은 사용할 수 있습니다 1. 속성 객체를 반환 2. 방법 3. 싱글이 필요하세요 예 5. 프로토콜 6 ... 이 – Jlexyc

답변

0

올바르게 이해하고 있는지 확실하지 않지만 SimpleScatterView.m에서 표시기 nsarray에 액세스하지 않고 ViewController.m에서 값을 설정하려고 시도한 것 같습니다.

1) SimpleScatterView.m에서 공개 NSArray를 정의하고 합성합니다.

2) 액세스를 시도하는 대신 ViewControler.m에서 "prepareForSegue"를 사용하여 destinationSegueController에 표시기를 설정하십시오.

3) SimpleScatterView.m에서 "- (void) setIndicator : (NSArray *) indicator"를 구현하고 필요에 따라 GUI를 업데이트하십시오.

"Model - View - Controller"패러다임은 ViewController를 사용하여 통신을 수행하지 않는 것이 좋지만 다른 스레드를위한 것입니다. 난 당신이 뭘 하려는지 잘못 읽지 않는 경우

+0

프로젝트 나는 건물이 있어요 ... 당신의 요구 사항에 따라 달라집니다 SimpleScatterPlot을 보유하고있는 UIView를 포함하는 단일보기 응용 프로그램입니다. 그래서 어떤 단서도 관련이 없습니다. –

+0

어쩌면 당신은 같은 아이디어를 시도 할 수 있지만 대신 segue 프로토콜을 사용하여 ... – apascual

0

, 내 생각 엔 (이 SimpleScatterView 실제로 UIView라고 가정한다) 당신이 적절하게 UIViewController보기 내에서 SimpleScatterView을 사용할 수 있다는 것입니다.

이 경우 컨트롤러가 데이터를 다운로드 할 때 SimpleScatterView을 인스턴스화하고보기 컨트롤러 view에 추가하여 표시 할 수 있습니다.

... <data has been downloaded> ... 
SimpleScatterView* scatterView = [[SimpleScatterView alloc] initWithFrame:...]; 
[self.view addSubview:scatterView]; 

당신이 초기화하면 당신의 SimpleScatterView, 당신은 데이터 배열 (예를 들어, 자사의 사용자 정의 init 메소드에서, 또는 속성을 사용)에 대한 참조를 전달할 수 있습니다. 예컨대 :

SimpleScatterView* scatterView = [[SimpleScatterView alloc] initWithFrame:... andData:(NSArray*)...]; 

나 : 물론

scatterView.dataSet = <your_json_array>; 

, 당신은이 디자인에 대한 대안의 많음이있다. 특히, 내가 말할 것이다 :

  1. 플롯보기가에서 데이터를 읽는 동안, 컨트롤러가 모델에 데이터를 기록하도록 모든 데이터를 처리 할 모델 클래스를 사용할 수있는 가능성.이 모델은 액세스의 용이성을 위해 싱글 톤을 통해 구현 될 수 있습니다.

  2. 플롯보기에 "데이터 소스"를 사용할 수있는 가능성 :보기와 데이터 소스 간의 프로토콜 정의가 필요합니다 (예 : getData 메소드). 뷰 컨트롤러가 데이터 소스의 역할을 수행하게됩니다. 즉, 위 예제에서와 같이 플롯보기에 배열을 전달하는 대신 컨트롤러에 대한 참조를 전달하면 뷰에서 해당 데이터에 액세스합니다.

0

ViewController에서 속성을 만들고 합성합니다. 그런 다음 JSON 데이터를 속성에 전달합니다.

To access the array in SimpleScatterView.m: 
    Viewcontroller *viewcontrol = [[ViewController alloc] init]; 
    You can then access the array by using viewcontrol.indicator. 
    NSLog(@"%@",viewcontrol.indicator); 
+0

나는 이것을 시도했지만 프로젝트를 빌드하려고하면 오류가 발생합니다. #include "ViewController.h"에 제공 한 코드를 사용하기 위해 믿습니다. 문제는, 내 코드가 이미 SimpleScatterPlot.h를 ViewController.h로 가져옵니다 ... 중복 된 것처럼 보이고 이것이 내가 오류를 일으키는 이유라고 생각합니다. –

관련 문제