2013-02-19 3 views
1

Я последовал за учебником Джона Вордсворта (http://www.johnwordsworth.com/2011/10/adding-charts-to-your-iphone-ipad-app-using-core-plot/), чтобы создать линейный граф с CorePlot.Как использовать значения из массива, определенного в другом классе

Позже я решил получить некоторые данные JSON с веб-сайта, чтобы я мог использовать его для своего графика.

Все методы подключения URL-адреса выполняются в моем файле ViewController.m. И там я создал NSArray под названием indicator, содержащий все данные JSON.

Моя проблема заключается в том, что все параметры графа определяются в отдельном классе NSObject называется SimpleScatterPlot.m, где я хотел бы использовать массив строк «indicator» (определенный в ViewController.m), чтобы настроить метки оси х.

Что мне нужно сделать, чтобы я мог использовать этот массив данных JSON в SimpleScatterPlot.m?
Я пробовал #import "ViewController.h", но это не решило.

Заранее благодарим за любые рекомендации, которые вы можете дать мне.

+0

вы должны создать экземпляр 'viewController' для того, чтобы получить доступ к его Ивара в' SimpleScatterView' – nsgulliver

+0

http://en.wikipedia.org/wiki/Objective-C Прочти. Вы можете использовать: 1. Свойства 2. Метод, который возвращает объект 3. Синглтон, чтобы получить необходимый экземпляр 5. Протокол 6 ... Зависят от ваших требований ... – Jlexyc

ответ

0

Не уверен, правильно ли я это понимаю, но я думаю, что вы не пытаетесь получить доступ к индикатору nsarray из SimpleScatterView.m, но чтобы установить там значение из ViewController.m.

1) Определите публичный NSArray в SimpleScatterView.m и синтезируйте его.

2) Вместо того, чтобы пытаться получить доступ, используйте «prepareForSegue» в ViewControler.m для установки индикатора в целевом контроллере.

3) В SimpleScatterView.m реализуется «- (void) setIndicator: (NSArray *) индикатор» и обновляет графический интерфейс по мере необходимости.

Хотя парадигма «Модель - Вид - Контроллер» рекомендует не использовать ViewControllers для выполнения сообщений и т. Д., Но это для другого потока.

+0

Проект Я здание одно приложение просмотра, содержащее UIView, которое содержит SimpleScatterPlot. Таким образом, не существует никаких секций. –

+0

Возможно, вы можете попробовать ту же идею, но используя протокол вместо segue ... – apascual

0

Если я не читаю неправильно, что вы пытаетесь сделать, я думаю, что вы могли бы надлежащим образом использовать SimpleScatterView из вашего UIViewController зрения (это, предполагая, что SimpleScatterView на самом деле является UIView).

В этом случае, когда ваш контроллер загрузил свои данные, вы можете создать экземпляр SimpleScatterView и отобразить его, добавив его в контроллер вашего вида view.

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

При инициализации SimpleScatterView, вы можете передать ему ссылку на массив данных (например, в методе пользовательских инициализации, или используя свойство). например .:

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

Я пробовал это, но получаю ошибки при попытке построить проект. Я считаю, что для использования этого кода вам нужно было #import «ViewController.h». Дело в том, что мой код уже импортирует SimpleScatterPlot.h в ViewController.h ... кажется излишним, и я думаю, что это то, что я вызываю. –

Смежные вопросы