Как передавать данные (массивы) между функциями - PullRequest
0 голосов
/ 06 декабря 2011

Я должен использовать библиотеку s7graphview для рисования простой гистограммы, и у меня есть пользовательская функция с именем -(IBAction)histogram:(id)sender;. в этой функции каждый пиксель изображения передается в массив как представление RGB. затем считаются пиксели, и у меня есть красный, зеленый и синий массив. Я могу отправить в NSLog или еще что-нибудь, но проблема в том, что я пытаюсь отправить 3 массива на - (NSArray *)graphView:(S7GraphView *)graphView yValuesForPlot:(NSUInteger)plotIndex;. обе функции находятся в одном и том же файле .m, и я не знаю, как передавать данные между ними, потому что когда я пишу redArray, Xcode не предлагает мне это имя.

1 Ответ

1 голос
/ 08 декабря 2011

Поскольку - (NSArray *)graphView:(S7GraphView *)graphView yValuesForPlot:(NSUInteger)plotIndex является методом делегата, он должен быть реализован в вашем классе, который изображает из себя делегат объекта S7GraphView. Вы не вызываете явно, вы определяете это как таковое в вашей реализации .m:

- (NSArray *)graphView:(S7GraphView *)graphView yValuesForPlot:(NSUInteger)plotIndex
{
    if ( plotIndex == <some index value> )
        return redArray;
    else
        return nil;
}

Я понятия не имею, что plotIndex соответствует вашим различным цветным массивам, но вы должны понять.

Когда объекту S7GraphView нужны эти данные, он вызывает этот метод delegate.

Это мало чем отличается от реализации UITableViewDelegate и UITableViewDataSource методов. При вызове UITableView метода -reloadData ваш контроллер представления (при условии, что он является делегатом / источником данных таблицы) будет вызывать UITableViewCell объекты через

.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = <... dequeue or created ... >.

    /* 
        do some cell set up code based on indexPath.section and indexPath.row
    */

    return cell;
}

Аналогично S7GraphView Я уверен (у меня нет API, чтобы увидеть все, что он делает). В вашем методе IBAction вы, вероятно, будете делать что-то вроде:

- (IBAction)histogram:(id)sender
{
    // maybe you recalculate your red, green, and blue component arrays here and cache
    // or maybe you calculate them when requested by the delegate method

    // tell the S7GraphView it needs to update
    // (not sure what the reload method is actually called)
    [self.myS7GraphView reloadGraph];
}
...