1

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

我做了什么:

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

所以我要问的是,是否有人能看到我在调试器抛出的异常中看不到的任何东西:(sportCenter 是 aNSObject并且它没有在这个控制器中导入 - 也试过了!)

    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
4

1 回答 1

2

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

但是,我不太了解您的问题/上下文。它看起来设计有点复杂。布尔数组有可能是一个不好的方法。最好在控制器中有一个 selectedButton ( UIButton ) 属性,以了解选择了哪个,而不是维护四个布尔值。

最后,无论哪种情况,如果所有对象都正常工作,除了第一个对象,这通常意味着您在某个地方遇到了数组索引错误。

我希望它有所帮助。

于 2015-11-05T13:46:14.330 回答