NSInvalidArgumentException',原因:'- [UITableViewWrapperView indexPathForCell:]'

11

好的,我有一个问题需要升级iOS 6到7。iOS 6运行正常,但在iOS7中出现以下错误。

我不确定,但我认为错误是在这里发生的。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Events Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}

// Configure the cell...
Event *event = [self.fetchedResultsController objectAtIndexPath:indexPath];
cell.textLabel.text = event.name;
return cell;
}

基本上当我调用TableViewCell时,它会带出一个DatePicker但是当我点击“完成”按钮时它会崩溃。有什么线索吗?

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UITableViewWrapperView indexPathForCell:]: unrecognized selector sent to instance 0xc133070'



2013-09-24 17:26:14.056 CRM4Life[36587:a0b] -[UITableViewWrapperView indexPathForCell:]:     unrecognized selector sent to instance 0xc133070
2013-09-24 17:26:14.097 CRM4Life[36587:a0b] *** Terminating app due to uncaught   exception 'NSInvalidArgumentException', reason: '-[UITableViewWrapperView     indexPathForCell:]: unrecognized selector sent to instance 0xc133070'
*** First throw call stack:
(
0   CoreFoundation                      0x02d425e4 __exceptionPreprocess + 180
1   libobjc.A.dylib                     0x019818b6 objc_exception_throw + 44
2   CoreFoundation                      0x02ddf903 -[NSObject(NSObject) doesNotRecognizeSelector:] + 275
3   CoreFoundation                      0x02d3290b ___forwarding___ + 1019
4   CoreFoundation                      0x02d324ee _CF_forwarding_prep_0 + 14
5   CRM4Life                            0x0000dd0e -[CoreDataTableViewCell resignFirstResponder] + 206
6   UIKit                               0x00640550 -[UIResponder becomeFirstResponder] + 347
7   UIKit                               0x00543d0b -[UIView(Hierarchy) becomeFirstResponder] + 114
8   UIKit                               0x00bc30e3 -[UITextField becomeFirstResponder] + 51
9   UIKit                               0x00868651 -[UITextInteractionAssistant(UITextInteractionAssistant_Internal) setFirstResponderIfNecessary] + 135
10  UIKit                               0x0086aba2 -[UITextInteractionAssistant(UITextInteractionAssistant_Internal) oneFingerTap:] + 2640
11  UIKit                               0x0085ef8c _UIGestureRecognizerSendActions + 230
12  UIKit                               0x0085dc00 -[UIGestureRecognizer _updateGestureWithEvent:buttonEvent:] + 383
13  UIKit                               0x0085f66d -[UIGestureRecognizer _delayedUpdateGesture] + 60
14  UIKit                               0x00862bcd ___UIGestureRecognizerUpdate_block_invoke + 57
15  UIKit                               0x00862b4e _UIGestureRecognizerRemoveObjectsFromArrayAndApplyBlocks + 317
16  UIKit                               0x00859248 _UIGestureRecognizerUpdate + 199
17  UIKit                               0x00525d4a -[UIWindow _sendGesturesForEvent:] + 1291
18  UIKit                               0x00526c6a -[UIWindow sendEvent:] + 1030
19  UIKit                               0x004faa36 -[UIApplication sendEvent:] + 242
20  UIKit                               0x004e4d9f _UIApplicationHandleEventQueue + 11421
21  CoreFoundation                      0x02ccb8af __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 15
22  CoreFoundation                      0x02ccb23b __CFRunLoopDoSources0 + 235
23  CoreFoundation                      0x02ce830e __CFRunLoopRun + 910
24  CoreFoundation                      0x02ce7b33 CFRunLoopRunSpecific + 467
25  CoreFoundation                      0x02ce794b CFRunLoopRunInMode + 123
26  GraphicsServices                    0x02f9c9d7 GSEventRunModal + 192
27  GraphicsServices                    0x02f9c7fe GSEventRun + 104
28  UIKit                               0x004e794b UIApplicationMain + 1225
29  CRM4Life                            0x0000216d main + 141
30  CRM4Life                            0x000020d5 start + 53
31  ???                                 0x00000001 0x0 + 1
)
 libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb) 
1个回答

28
//for iOS 6 or earlier

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

// for iOS 7 UITableViewWrapperView has been added as superview

if (IOS_7) {
    tableView = (UITableView *)cell.superview.superview;
}

iOS7中,UITableViewCellScrollView作为单元格子视图出现,而UITableViewWrapperView作为单元格的父视图出现(仅多了一个级别)。

因此,如果你想从UITableViewWrapperView中获取UITableView实例,你需要使用UITableViewWrapperViewsuperview方法。


@Scubadivingfool 请告诉我你有什么疑问? - Praveen-K
我不确定在第二个父视图中添加什么。 - Scubadivingfool
@Scubadivingfool,您想要添加到第二个父视图中的内容是什么? - Praveen-K
毫无头绪。我需要在日期选择器上的“完成”按钮关闭,但它只会冻结,我不确定该如何修复它。在iOS6中一切正常运作。 - Scubadivingfool
非常感谢,这真的让我很困扰。 - darkheartfelt
1
不良编程实践:永远不要从子视图对超级视图层次结构做出假设,依赖关系图应该只向下而不是向上。你应该使用委托模式或类似的东西代替。 - Werner Altewischer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接