使用coreplot(Barchart)中的以下代码从GraphView.m类
执行segue但我收到错误:instance method '-performSegueWithIdentifier:sender:' not found (return type defaults to 'id')
我该如何解决?请帮助。
在此先感谢。
-(void)barPlot:(CPTBarPlot *)plot barWasSelectedAtRecordIndex:(NSUInteger)index
{
NSLog(@"barWasSelectedAtRecordIndex %d", index);
[self performSegueWithIdentifier:@"list2" sender:self];
}
答案 0 :(得分:1)
如果GraphView.m是一个UIView,你将不会走得太远,因为performSegueWithIdentifier:sender
是一个UIViewController方法。
假设graphView是从viewController创建的,你想将它的委托设置为viewController。
GraphView.h中的
在@interface上面声明一个graphView协议:
@protocol GraphViewDelegate
-(void)barPlot:(CPTBarPlot *)plot barWasSelectedAtRecordIndex:(NSUInteger)index
@end
声明一个属性:
@property (weak) id <GraphViewDelegate> delegate;
:
-(void)barPlot:(CPTBarPlot *)plot barWasSelectedAtRecordIndex:(NSUInteger)index
{
[[self delegate] barPlot:plot barWasSelectedAtRecordIndex:index];
}
在ViewController.h中修改@interface行
@interface MyViewController: UIViewController <GraphViewDelegate>
ViewController.m中的
创建graphView时,将委托设置为self(如果在Interface Builder中创建了graphView,则可以CTRL-拖动一行到viewController来设置委托):
GraphView* graphView = [GraphView alloc] init];
[graphView setDelegate:self];
实现您在GraphView中使用的委托方法(您可能不需要index
参数,但无论如何我都将它带过来了。)
-(void)barPlot:(CPTBarPlot *)plot barWasSelectedAtRecordIndex:(NSUInteger)index
{
[self performSegueWithIdentifier:@"list2" sender:self];
}
您可能希望修改方法签名,例如
-(void)graphView:(GraphView*)graphView
didSelectBarAtIndex:(NSUInteger)index
barPlot:(CPTBarPlot *)plot
(it's good practice to send a reference to the sender along with the message)
答案 1 :(得分:0)
如果您确定没有拼写错误,则可以尝试在.h文件中包含该方法。