目前正在关注使用io6构建的清单教程。我正在使用xcode 5,ios7 sdk。该教程尚未针对IOS7进行更新,但我不想停止学习,因此决定继续使用过时的教程并希望将其用作学习体验。使用官方Apple文档阅读和广泛的谷歌搜索作为我的指南。
我很早就遇到了一个问题而且不确定是什么问题。我注意到自动完成功能已经删除了以下部分方法(可能会弃用?)。问题肯定来自下面的代码,因为一旦我删除它,模拟器加载应用程序就好了。
代码导致崩溃:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return 1;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"ChecklistItem"];
return cell;
}
这是堆栈跟踪:
2013-09-28 20:51:26.208 Checklists[47289:a0b] *** Assertion failure in -[UITableView _configureCellForDisplay:forIndexPath:], /SourceCache/UIKit_Sim/UIKit-2903.2/UITableView.m:6235
2013-09-28 20:51:26.218 Checklists[47289:a0b] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'UITableView dataSource must return a cell from tableView:cellForRowAtIndexPath:'
*** First throw call stack:
(
0 CoreFoundation 0x017335e4 __exceptionPreprocess + 180
1 libobjc.A.dylib 0x014b68b6 objc_exception_throw + 44
2 CoreFoundation 0x01733448 +[NSException raise:format:arguments:] + 136
3 Foundation 0x0109723e -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 116
4 UIKit 0x00311ae5 __53-[UITableView _configureCellForDisplay:forIndexPath:]_block_invoke + 426
5 UIKit 0x0028af5f +[UIView(Animation) performWithoutAnimation:] + 82
6 UIKit 0x0028afa8 +[UIView(Animation) _performWithoutAnimation:] + 40
7 UIKit 0x00311936 -[UITableView _configureCellForDisplay:forIndexPath:] + 108
8 UIKit 0x00317d4d -[UITableView _createPreparedCellForGlobalRow:withIndexPath:] + 442
9 UIKit 0x00317e03 -[UITableView _createPreparedCellForGlobalRow:] + 69
10 UIKit 0x002fc124 -[UITableView _updateVisibleCellsNow:] + 2378
11 UIKit 0x0030f5a5 -[UITableView layoutSubviews] + 213
12 UIKit 0x00293dd7 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 355
13 libobjc.A.dylib 0x014c881f -[NSObject performSelector:withObject:] + 70
14 QuartzCore 0x03aed72a -[CALayer layoutSublayers] + 148
15 QuartzCore 0x03ae1514 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 380
16 QuartzCore 0x03aed675 -[CALayer layoutIfNeeded] + 160
17 UIKit 0x0034eca3 -[UIViewController window:setupWithInterfaceOrientation:] + 304
18 UIKit 0x0026dd27 -[UIWindow _setRotatableClient:toOrientation:updateStatusBar:duration:force:isRotating:] + 5212
19 UIKit 0x0026c8c6 -[UIWindow _setRotatableClient:toOrientation:updateStatusBar:duration:force:] + 82
20 UIKit 0x0026c798 -[UIWindow _setRotatableViewOrientation:updateStatusBar:duration:force:] + 117
21 UIKit 0x0026c820 -[UIWindow _setRotatableViewOrientation:duration:force:] + 67
22 UIKit 0x0026b8ba __57-[UIWindow _updateToInterfaceOrientation:duration:force:]_block_invoke + 120
23 UIKit 0x0026b81c -[UIWindow _updateToInterfaceOrientation:duration:force:] + 400
24 UIKit 0x0026c573 -[UIWindow setAutorotates:forceUpdateInterfaceOrientation:] + 870
25 UIKit 0x0026fb66 -[UIWindow setDelegate:] + 449
26 UIKit 0x00340dc7 -[UIViewController _tryBecomeRootViewControllerInWindow:] + 180
27 UIKit 0x002657cc -[UIWindow addRootViewControllerViewIfPossible] + 609
28 UIKit 0x00265947 -[UIWindow _setHidden:forced:] + 312
29 UIKit 0x00265bdd -[UIWindow _orderFrontWithoutMakingKey] + 49
30 UIKit 0x0027044a -[UIWindow makeKeyAndVisible] + 65
31 UIKit 0x002238e0 -[UIApplication _callInitializationDelegatesForURL:payload:suspended:] + 1851
32 UIKit 0x00227fb8 -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 824
33 UIKit 0x0023c42c -[UIApplication handleEvent:withNewEvent:] + 3447
34 UIKit 0x0023c999 -[UIApplication sendEvent:] + 85
35 UIKit 0x00229c35 _UIApplicationHandleEvent + 736
36 GraphicsServices 0x036862eb _PurpleEventCallback + 776
37 GraphicsServices 0x03685df6 PurpleEventCallback + 46
38 CoreFoundation 0x016aedd5 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 53
39 CoreFoundation 0x016aeb0b __CFRunLoopDoSource1 + 523
40 CoreFoundation 0x016d97ec __CFRunLoopRun + 2156
41 CoreFoundation 0x016d8b33 CFRunLoopRunSpecific + 467
42 CoreFoundation 0x016d894b CFRunLoopRunInMode + 123
43 UIKit 0x002276ed -[UIApplication _run] + 840
44 UIKit 0x0022994b UIApplicationMain + 1225
45 Checklists 0x00001b7d main + 141
46 libdyld.dylib 0x01d6f725 start + 0
)
libc++abi.dylib: terminating with uncaught exception of type NSException
答案 0 :(得分:1)
我猜你没有在故事板中为你的单元格设置一个标识符,它崩溃了,因为它无法实例化一个标识符不存在的单元格
答案 1 :(得分:1)
dequeueReusableCellWithIdentifier:
用于重用表视图单元格。如果没有要重用的单元格,则此方法返回nil
,您必须手动创建表格视图单元格并将其返回。如果有一个表视图单元格与之前使用的另一个单元格相同,dequeueReusableCellWithIdentifier:
可能会返回一个有效的单元格。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"ChecklistItem"];
if(!cell)
cell= [[UITableViewCell alloc]initWithStyle: UITableViewCellStyleDefault reuseIdentifier: @"ChecklistItem"];
return cell;
}
答案 2 :(得分:1)
这意味着
返回一个单元格
UITableView
dataSource必须从tableView:cellForRowAtIndexPath:
正如错误消息所示。
dequeueReusableCellWithIdentifier:
无法保证始终返回一个单元格,因为它可能会返回nil
。
如果您支持iOS> = 6,请使用永远不会返回dequeueReusableCellWithIdentifier:forIndexPath:
的{{1}}进行更改。
documentation非常明确。
将你的代码包装起来
nil
答案 3 :(得分:0)
您需要将类设置为tableview的数据源。您可以通过控制从故事板中的tableview拖动到底部的viewController图标(最左侧)并单击dataSource和delegate来完成此操作。