obj-c, путаница, почему я не могу добавить сеттер в этот класс? - PullRequest
0 голосов
/ 20 января 2011

Обычно у меня нет проблем с добавлением метода установки в класс.

Однако я пытаюсь добавить в класс использования библиотеки, что должно быть причиной проблемы.

Вот класс, в который я добавил его ...

@interface GraphController : TKGraphController {
UIActivityIndicatorView *indicator;
NSMutableArray *data; //I've added
NSString *strChartType; //I've added
}
-(void)setContentType:(NSString*)value; //I've added
@end

@implementation GraphController
-(void)setContentType:(NSString*)value { //I've added

if (value != strChartType) {
    [value retain];
    [strChartType release];
    strChartType = value;
    NSLog(@"ChartType=%@", strChartType);
}     
}

Вот где я получаю предупреждение ..

UIViewController *vc = [[GraphController alloc] init];      
[vc setContentType:myGraphType];  //Warnings on this line see below
[self presentModalViewController:vc animated:NO];
[vc release];

myGraphType, если определен в моем константном классе.

* Предупреждения *

warning: 'UIViewController' may not respond to '-setContentType:'
warning: (Messages without a matching method signature

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

Куда я иду не так?

Ответы [ 2 ]

5 голосов
/ 20 января 2011
UIViewController *vc = [[GraphController alloc] init];

означает, что vc указывает на экземпляр GraphController, но сама переменная имеет тип UIViewController *, а UIViewController не объявляет метод -setContentType:.

Замените это на

GraphController *vc = [[GraphController alloc] init];

сообщает компилятору, что вы работаете с экземпляром GraphController, и он распознает ваш метод -setContentType:.

1 голос
/ 20 января 2011

Вам просто нужно сообщить компилятору, что вы работаете с классом, который, как он знает, отвечает на метод. Вы можете сделать это несколькими способами, но самый простой из них, если вы просто хотите устранить предупреждение, - привести объект в очередь перед вызовом метода.

UIViewController *vc = [[GraphController alloc] init];      
[(GraphController *)vc setContentType:myGraphType];  //No warning should appear now.
[self presentModalViewController:vc animated:NO];
[vc release];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...