iOS7 中的 UITableViewCell indexPath 崩溃

标签 uitableview segue ios7 superview

我有一个 UITableViewCellUITableViewController .
在我的单元格中,有一个按钮,当您单击它时会将您带到另一个 viewprepareforsegue .
prepareForSegue我这样做:

if ([[segue identifier] isEqualToString:@"MySegue"])
{
    UITableViewCell *cell = (UITableViewCell*) [[sender superview] superview];
    UITableView *table = (UITableView*)[[[sender superview] superview] superview];
    NSIndexPath *indexPath = [table indexPathForCell:cell]; 
}

好的!一切都一直运作良好。但是现在我已经用 iOS7 升级了 xCode,当我点击单元格中的按钮时,一个错误出现在我面前,我不知道如何解决它:
[UITableViewCell indexPathForCell:]: unrecognized selector sent to instance 0x9e160b0
2013-09-20 16:30:44.427 MyApp[8212:a0b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UITableViewCell indexPathForCell:]: unrecognized selector sent to instance 0x9e160b0'
*** First throw call stack:
(
    0   CoreFoundation                      0x024475e4 __exceptionPreprocess + 180
    1   libobjc.A.dylib                     0x01a5d8b6 objc_exception_throw + 44
    2   CoreFoundation                      0x024e4903 -[NSObject(NSObject) doesNotRecognizeSelector:] + 275
    3   CoreFoundation                      0x0243790b ___forwarding___ + 1019
    4   CoreFoundation                      0x024374ee _CF_forwarding_prep_0 + 14
    5   MyApp                              0x0004bc01 -[NewsTableViewController prepareForSegue:sender:] + 3441
    6   UIKit                               0x00af69cc -[UIStoryboardSegueTemplate _perform:] + 156
    7   UIKit                               0x00af6a59 -[UIStoryboardSegueTemplate perform:] + 115
    8   libobjc.A.dylib                     0x01a6f874 -[NSObject performSelector:withObject:withObject:] + 77
    9   UIKit                               0x005c4c8c -[UIApplication sendAction:to:from:forEvent:] + 108
    10  UIKit                               0x005c4c18 -[UIApplication sendAction:toTarget:fromSender:forEvent:] + 61
    11  UIKit                               0x006bc6d9 -[UIControl sendAction:to:forEvent:] + 66
    12  UIKit                               0x006bca9c -[UIControl _sendActionsForEvents:withEvent:] + 577
    13  UIKit                               0x006bbd4b -[UIControl touchesEnded:withEvent:] + 641
    14  UIKit                               0x00936d7f _UIGestureRecognizerUpdate + 7166
    15  UIKit                               0x00601d4a -[UIWindow _sendGesturesForEvent:] + 1291
    16  UIKit                               0x00602c6a -[UIWindow sendEvent:] + 1030
    17  UIKit                               0x005d6a36 -[UIApplication sendEvent:] + 242
    18  UIKit                               0x005c0d9f _UIApplicationHandleEventQueue + 11421
    19  CoreFoundation                      0x023d08af __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 15
    20  CoreFoundation                      0x023d023b __CFRunLoopDoSources0 + 235
    21  CoreFoundation                      0x023ed30e __CFRunLoopRun + 910
    22  CoreFoundation                      0x023ecb33 CFRunLoopRunSpecific + 467
    23  CoreFoundation                      0x023ec94b CFRunLoopRunInMode + 123
    24  GraphicsServices                    0x032c89d7 GSEventRunModal + 192
    25  GraphicsServices                    0x032c87fe GSEventRun + 104
    26  UIKit                               0x005c394b UIApplicationMain + 1225
    27  MyApp                              0x00002cfb main + 235
    28  libdyld.dylib                       0x01f42725 start + 0
    29  ???                                 0x00000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException

应用程序崩溃的那一行是:
    NSIndexPath *indexPath = [table indexPathForCell:cell]; }

最佳答案

在 iOS7 UITableViewWrapperViewUITableViewCell的 super View ,这对您来说意味着另一个 super View :

iOS7:

UITableView *tableView = (UITableView *)cell.superview.superview;

iOS6"
UITableView *tableView = (UITableView *)cell.superview;

另一个变化你可以找到它here :

似乎你的代码: UITableView table = (UITableView)[[[sender superview] superview] superview];返回 UITableViewCell不是 UITableView .

试试下面的:
UITableView *table = (UITableView*)[[[[[sender superview] superview] superview] superview] superview];

关于iOS7 中的 UITableViewCell indexPath 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18919616/

相关文章:

ios - didSelectRowAtIndexPath 在 canEditRowAtIndexPath 之前执行

ios - 如何在表格 View 中的特定内容之上设置标题

ios - 如何将 indexPath(不是 indexPath.row)传递到我的 UITableViewCell 的 IBAction

ios segue无法识别的选择器发送到实例

ios - 如何在不使用segue的情况下将数据从一个ViewController传递到MainViewController?

ios - 如何实现滑动以从两侧显示单元格

ios - 从选项卡 Controller 中转出更多问题

iphone - 在 iOS 7 上运行应用程序时显示黑条(4 英寸视网膜显示屏)

ios - 在 uiwindow subview 之上呈现 View Controller

ios - UIBarbuttonItem 在 ios 7 上没有标题