当前类中未包含的对象上的copywithzone异常

时间:2015-11-05 13:23:54

标签: ios objective-c uipickerview nsobject copywithzone

我正在使用4 UIButton来显示相同​​的UIPickerView但每个按钮显示不同的NSArray(4)。使用4 boolUIPickerView决定加载哪个,以及row's text要抓取哪个。按钮方法只包含四个bool属性,将三个属性设置为false,将正确的一个(按钮点按)设置为true。然后调用UIViewAnimateWithDuration调出UIPickerView(打印在UIView - 同时UIPickerViewUIToolbar一起工作)。除了一个之外,所有按钮都工作正常(无论我带多少时间关闭UIPickerView)(即使它按照第一个中间位置按下任意顺序)。 Xcode抛出以下异常:

我做了什么:

  • 删除按钮,创建一个新按钮
  • 尝试了创建按钮的故事板/控制器方法
  • 使用addtarget
  • 向按钮添加方法
  • 使用故事板的方法链接按钮

所以我要问的是,是否有人可以看到我在调试器抛出的异常中看不到的任何内容:( sportCenter是NSObject并且它不会在此控制器中导入 - 也是这样!)

    2015-11-05 13:14:36.356 -----[3975:1397857] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[sportCenter copyWithZone:]: unrecognized selector sent to instance 0x7f8709f62250'
*** First throw call stack:
(
    0   CoreFoundation                      0x0000000103673f45 __exceptionPreprocess + 165
    1   libobjc.A.dylib                     0x00000001030eddeb objc_exception_throw + 48
    2   CoreFoundation                      0x000000010367c56d -[NSObject(NSObject) doesNotRecognizeSelector:] + 205
    3   CoreFoundation                      0x00000001035c9eea ___forwarding___ + 970
    4   CoreFoundation                      0x00000001035c9a98 _CF_forwarding_prep_0 + 120
    5   UIKit                               0x0000000103c8954b -[UILabel _setText:] + 114
    6   UIKit                               0x0000000103a0580c -[UIPickerView tableView:cellForRowAtIndexPath:] + 863
    7   UIKit                               0x000000010429c146 -[UIPickerColumnView tableView:cellForRowAtIndexPath:] + 103
    8   UIKit                               0x0000000103b75e2a -[UITableView _createPreparedCellForGlobalRow:withIndexPath:willDisplay:] + 782
    9   UIKit                               0x0000000103b75f3f -[UITableView _createPreparedCellForGlobalRow:willDisplay:] + 74
    10  UIKit                               0x0000000103b4b307 -[UITableView _updateVisibleCellsNow:isRecursive:] + 3187
    11  UIKit                               0x0000000103b5d369 -[UITableView cellForRowAtIndexPath:] + 186
    12  UIKit                               0x000000010412419a -[UIPickerTableView selectRow:animated:notify:] + 342
    13  UIKit                               0x0000000103a0421f -[UIPickerView _resetSelectionOfTables] + 157
    14  UIKit                               0x0000000103a040ab __30-[UIPickerView layoutSubviews]_block_invoke + 9523
    15  UIKit                               0x0000000103ac9c10 +[UIView(Animation) performWithoutAnimation:] + 65
    16  UIKit                               0x0000000103a01b33 -[UIPickerView layoutSubviews] + 147
    17  UIKit                               0x0000000103a04fcb -[UIPickerView selectedRowInComponent:] + 45
    18  UIKit                               0x0000000103a0009e -[UIPickerView _updateSelectedRows] + 135
    19  UIKit                               0x0000000103a001cf -[UIPickerView didMoveToWindow] + 117
    20  UIKit                               0x0000000103acebe0 -[UIView(Internal) _didMoveFromWindow:toWindow:] + 1768
    21  UIKit                               0x0000000103ace856 -[UIView(Internal) _didMoveFromWindow:toWindow:] + 862
    22  UIKit                               0x0000000103ac3e2c __45-[UIView(Hierarchy) _postMovedFromSuperview:]_block_invoke + 155
    23  Foundation                          0x0000000102cc3d4a -[NSISEngine withBehaviors:performModifications:] + 155
    24  UIKit                               0x0000000103ac3d4a -[UIView(Hierarchy) _postMovedFromSuperview:] + 575
    25  UIKit                               0x0000000103ad17e7 -[UIView(Internal) _addSubview:positioned:relativeTo:] + 1967
    26  ---                        0x00000001026cbe7b -[AllOngoingViewController animatePickerView] + 107
    27  ---                        0x00000001026cbcd7 -[AllOngoingViewController centersAreTapped] + 71
    28  UIKit                               0x0000000103f0194f _UIGestureRecognizerSendTargetActions + 153
    29  UIKit                               0x0000000103efdfc1 _UIGestureRecognizerSendActions + 162
    30  UIKit                               0x0000000103efbfbe -[UIGestureRecognizer _updateGestureWithEvent:buttonEvent:] + 843
    31  UIKit                               0x0000000103f04283 ___UIGestureRecognizerUpdate_block_invoke898 + 79
    32  UIKit                               0x0000000103f04121 _UIGestureRecognizerRemoveObjectsFromArrayAndApplyBlocks + 342
    33  UIKit                               0x0000000103ef1bdd _UIGestureRecognizerUpdate + 2634
    34  UIKit                               0x0000000103a8f9c0 -[UIWindow _sendGesturesForEvent:] + 1137
    35  UIKit                               0x0000000103a90bf6 -[UIWindow sendEvent:] + 849
    36  UIKit                               0x0000000103a402fa -[UIApplication sendEvent:] + 263
    37  UIKit                               0x0000000103a1aabf _UIApplicationHandleEventQueue + 6844
    38  CoreFoundation                      0x00000001035a0011 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
    39  CoreFoundation                      0x0000000103595f3c __CFRunLoopDoSources0 + 556
    40  CoreFoundation                      0x00000001035953f3 __CFRunLoopRun + 867
    41  CoreFoundation                      0x0000000103594e08 CFRunLoopRunSpecific + 488
    42  GraphicsServices                    0x0000000106616ad2 GSEventRunModal + 161
    43  UIKit                               0x0000000103a2030d UIApplicationMain + 171
    44  -----                        0x00000001026c1caf main + 111
    45  libdyld.dylib                       0x000000010a19e92d start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException

1 个答案:

答案 0 :(得分:2)

您必须在对象中添加自己的copyWithZone:方法......

但是,我真的不明白你的问题/背景。它看起来设计有点复杂。布尔阵列有可能成为一个糟糕的方法。最好在控制器中使用selectedButton(UIButton)属性,以便知道选择哪一个,而不是维护四个布尔值。

最后,无论情况如何,如果事情对所有对象起作用,除了第一个,它通常意味着你在某处有一个数组索引错误。

我希望它有所帮助。