copywithzone исключение для объекта, не включенного в текущий класс

Я использую 4 UIButton которые воспитывают то же самое UIPickerView но с разными NSArray(4) появляется для каждой кнопки. Используя 4 bool чтобы позволить UIPickerView решить, какой загрузить, а какой row's text Хватать. Методы кнопок просто включают четыре bool свойства, который устанавливает три false и правильный (нажатие кнопки) для true, затем UIViewAnimateWithDuration называется, что воспитывает UIPickerView (напечатано в UIView - для обоих UIPickerView а также UIToolbar работать вместе). Все кнопки работают просто отлично (независимо от того, сколько раз я открываю / закрываю 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 ответ

Решение

Вы должны добавить свой собственный метод copyWithZone: в ваши объекты...

Тем не менее, я не очень понимаю ваш вопрос / контекст. Это выглядит разработано немного сложным способом. У логического массива есть шансы быть плохим подходом. Лучше иметь свойство selectedButton ( UIButton) в вашем контроллере, чтобы знать, какой из них выбран, чем поддерживать четыре логических значения.

И, наконец, независимо от ситуации, если все работает для всех объектов, за исключением первого, это часто означает, что у вас где-то есть ошибка индекса массива.

Я надеюсь, что это помогает.

Другие вопросы по тегам