【问题标题】:Unrecognized Selector on property that is in other class其他类中的属性上无法识别的选择器
【发布时间】:2011-11-27 16:49:51
【问题描述】:

我在编译时收到以下错误消息:

2011-11-27 14:59:32.049 Storyboard[12104:f803] -[TargetViewController setPeople:]:unrecognized selector sent to instance 0x6d50310
2011-11-27 14:59:32.051 Storyboard[12104:f803] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[TargetViewController setPeople:]: unrecognized selector sent to instance 0x6d50310'
*** First throw call stack:
(0x13c5052 0x1556d0a 0x13c6ced 0x132bf00 0x132bce2 0x2877 0x1a9d6 0x1b8a6 0x2a743 0x2b1f8 0x1eaa9 0x12affa9 0x13991c5 0x12fe022 0x12fc90a 0x12fbdb4 0x12fbccb 0x1b2a7 0x1ca9b 0x2508 0x2465)
terminate called throwing an exception

有趣的是,我的 TargetViewController 甚至没有“人”属性 (NSMutableArray)。

我的应用程序的结构是我有一个带有 tableView 的 tabbarcontroller,它有一个 detailView,在第二个选项卡中是一个带有弹出框的普通视图 (targetVieController)。

(如你所见,我用故事板设置了整个东西,这也是我的应用程序的名称。

感谢您的快速帮助!


编辑

也许我应该补充一点,一旦应用开始加载,编译器就会抛出错误……

按照 Michaels 和 MrMusic 的建议,我在我的呼叫堆栈中搜索人员并得到以下信息:

_cmd = SEL 0x6eae setPeople:(我认为这只是一个有断点的通知)

而且,令人惊讶的是,我有一个包含“人类”的数组,但它们没有显示在另一个选项卡的表格视图中。

回溯:

#0  -[TargetViewController setPeople:] (self=0x6891f90, _cmd=0x6e8e, b=0x689a8d0) at /Developer/Projects/Storyboard/Storyboard/TargetViewController.m:73
#1  0x000027c7 in -[CoverdaleAppDelegate application:didFinishLaunchingWithOptions:] (self=0x6a7a650, _cmd=0x4c796a, application=0xad74840, launchOptions=0x0) at /Developer/Projects/Storyboard/Storyboard/CoverdaleAppDelegate.m:44
#2  0x0001a9d6 in -[UIApplication _callInitializationDelegatesForURL:payload:suspended:] ()

#3  0x0001b8a6 in -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] ()
#4  0x0002a743 in -[UIApplication handleEvent:withNewEvent:] ()
#5  0x0002b1f8 in -[UIApplication sendEvent:] ()
#6  0x0001eaa9 in _UIApplicationHandleEvent ()
#7  0x012affa9 in PurpleEventCallback ()
#8  0x013991c5 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ ()
#9  0x012fe022 in __CFRunLoopDoSource1 ()
#10 0x012fc90a in __CFRunLoopRun ()
#11 0x012fbdb4 in CFRunLoopRunSpecific ()
#12 0x012fbccb in CFRunLoopRunInMode ()
#13 0x0001b2a7 in -[UIApplication _run] ()
#14 0x0001ca9b in UIApplicationMain ()
#15 0x00002458 in main (argc=1, argv=0xbffff644) at /Developer/Projects/Storyboard/Storyboard/main.m:16

【问题讨论】:

  • 要捕捉谁或什么在调用虚假设置器,为什么不在您的TargetViewController 中临时创建一个setPeople 方法并在那里设置一个断点?
  • 已经做了……没有错误。如果我在那里留下一个空方法,只是“setPeople”,我不会收到任何警告,但我用来填写我的应用程序委托的数组(“people”)现在是空的......
  • 在 setPeople 中设置断点并查看调用堆栈以深入了解谁/什么试图设置人员。
  • 我更新了答案,还是没有头绪...
  • 根据堆栈跟踪,您的问题必须在 CoverdaleAppDelegate.m 第 44 行。需要查看该行的代码才能更具体地了解。

标签: objective-c ios debugging compiler-errors unrecognized-selector


【解决方案1】:

在您的项目中搜索“.people”和“setPeople”,查看NSMutableArray 集合的设置位置。确认您始终在适当的对象(具有 people 属性的对象或具有 people 属性的对象的子类)上设置 people

编辑:某处试图设置人员集合。如果搜索“.people”和“setPeople”字面上没有返回任何内容,那么可能是 IB 或 StoryBoard 中的某些内容试图设置人员。我最初的想法是某些视图控制器错误地具有 TargetViewController 类型并试图设置人员(也许你说 myViewController.people = ... 其中 myViewController 是错误的类型。

【讨论】:

  • 已经...在 targetView 或我的 Popover-controller 中没有人
【解决方案2】:

您可能在某处发生了内存泄漏。具有 setPeople 方法的任何类都可能在某处未正确保留。

【讨论】:

  • 我正在使用自动引用计数
  • 那没关系。我通常将此错误作为内存泄漏的症状。
猜你喜欢
  • 2020-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-07
相关资源
最近更新 更多