【问题标题】:-[UIView setHostedGraph:] unrecognized selector sent to instance-[UIView setHostedGraph:] 无法识别的选择器发送到实例
【发布时间】:2014-05-06 07:51:34
【问题描述】:

我正在尝试使用 Core Plot 来绘制图形,但我的图形视图被实例化为 UIView 即使我在界面构建器中将其设置为 CPTGraphHostingView

这是我的代码:

usersGraph = [[CPTXYGraph alloc] initWithFrame:usersGraphView.frame];
usersGraphView.hostedGraph = usersGraph;

为什么会这样?

【问题讨论】:

  • 能否显示崩溃日志。
  • 确实;说明为什么您认为它是 UIView 而不是 Core Plot 自定义视图。
  • @Fogmeister @trojanfoe 因为它在崩溃日志(标题)中这么说。如果它是该类的实例,它会说 CPTGraphHostingView。这是输出:2014-05-06 10:41:21.362 TanisalimAdmin[732:60b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIView setHostedGraph:]: unrecognized selector sent to instance 0x156d5930'

标签: ios objective-c xcode uiview core-plot


【解决方案1】:

在 Interface Builder 中打开和关闭一次又一次尝试一切之后,我开始在 StackOverflow 上进行更多搜索,我偶然发现了这个问题:Application crashes when working with core plot

很奇怪,但这不是 IB 问题(我确信我在 IB 中做的事情是正确的,我之前已经做过一千次了),而是链接器问题。我不知道为什么,但我不得不将-ObjC 添加到链接器标志中,它起作用了。

【讨论】:

  • 太棒了!我在自己的框架中有 CorePlot,我已经决定框架坏了……我失去了希望。谢谢!
  • 真的,这是因为 -ObjC 链接器标志。我的另一个错误是将-ObjC 的第一个O 设为小写'o'。 :(
【解决方案2】:

你不觉得很奇怪吗?

UIView 拥有setHostedGraph

-[UIView setHostedGraph:] 

我认为您在身份检查器上添加 CPTGraphHostingView 之前已将该 UIView 的 IBOutlet 拖到自定义类文件中。删除IBOutlet 并再次拖动。

我从 corePlot 下载了示例项目。确保IBOutletCPTGraphHostingView

【讨论】:

  • 这不会影响创建的视图类型。即使IBOutletUIView *,如果这是在 IB 中设置的,也会创建一个 Core Plot 视图。
  • IBOutlet 必须是 CPTGraphHostingView。如果没有,你做错了什么。
  • 不正确。如果您想在由标准(非子类)UIViewController 加载的 NIB 中创建自定义视图,怎么样? UIViewController.view 将是 UIView,但视图本身可以是子类 UIView 实例,在 IB 中设置。这里同样适用。当然,您应该正确设置 IBOutlet 以使编译器满意,但这不会导致加载的视图成为通用的 UIView 而不是自定义视图。
  • hm... 我很少使用 NIB。从使用故事板开始训练我的 iOS 技能。我想这可能是我当时不知道的事情。
  • 这是一个链接器问题,请参阅我的回答。
猜你喜欢
  • 2016-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多