Objective-C, используя протокол для доступа к источнику данных - PullRequest
0 голосов
/ 13 сентября 2011

Я использую модель MVC, но не могу получить данные, необходимые для представления, я пытаюсь использовать источник данных, поскольку представление никогда не должно владеть своими данными. Как правило, протокол используется для создания источника данных.

  • У меня есть MVC: CalculatorBrain. [Hm] - CalculatorViewController. [Hm] - (представление .xib)
  • У меня также есть MVC: GraphingView - GraphingViewController - (модель - это данные, которые я не могу получить)

Цель: когда я нажимаю кнопку на калькуляторе, он рисует функцию (например, х + 5 =), которая в данный момент отображается на дисплее. Часть калькулятора заботится о выражении / функции, отображении и т. Д., В то время как графическая часть должна рисовать. CalculatorViewController должен быть источником GraphingView , но данные всегда остаются нулевыми.

Это GraphingView.h с объявлением протокола:

@class GraphingView;

@protocol GraphingViewSource
- (float)getDataPoints:(GraphingView *)requestor;
@end

@interface GraphingView : UIView {
    id <GraphingViewSource> source;
}

@property (assign) id <GraphingViewSource> source;

@end

CalculatorViewController.m реализует протокол, реализуя метод getDataPoints:. Заголовок CalculationViewController.h:

@interface CalculatorViewController : UIViewController <GraphingViewSource>

Нажатие кнопки, которая должна настроить источник данных:

- (IBAction)graphPressed:(UIButton *)sender
{
    GraphingViewController *graphingVC = [[GraphingViewController alloc] init];
    graphingVC.graphingView.source = self;
    [self.navigationController pushViewController:graphingVC animated:YES];
    [graphingVC release];
}

Нажатие на кнопку прекрасно открывает новый вид и т. Д., Но следующая строка кода возвращает только ноль (внутри GraphingView.m):

float result = [self.source getDataPoints:self];

Кажется, я не могу получить доступ к своему источнику данных ...

1 Ответ

0 голосов
/ 13 сентября 2011

Из ваших комментариев кажется, что graphingView - это nil в то время, когда вы пытаетесь установить его источник.

Если для контроллера представления есть xib, вы должны сделать это:

GraphingViewController *graphingVC = [[GraphingViewController alloc] initWithNibName:@"GraphingViewController" bundle:nil];

Вместо простого init.

Это создаст и создаст экземпляры всех ваших объектов вида, чтобы они были доступны для настройки свойств перед представлением контроллера представления.

...