表视图不断给出 NSException 和崩溃
Posted
技术标签:
【中文标题】表视图不断给出 NSException 和崩溃【英文标题】:table view keeps giving NSException and crashes 【发布时间】:2011-05-24 14:50:12 【问题描述】:嗨,我是 iphone 的新手,从 iphone 开始,我卡在表格视图中,我的应用程序不断给出 NSException 和崩溃
我在 xib 应用程序中添加 tableView 后立即开始崩溃 这是 TableViewController.m 的代码
//
// TableViewController.m
// Table
//
// Created by Kunwar Handa on 17/05/11.
// Copyright 2011. All rights reserved.
//
#import "TableViewController.h"
@implementation TableViewController
@synthesize listData;
/*
// The designated initializer. Override to perform setup that is required before the view is loaded.
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self)
// Custom initialization
return self;
*/
/*
// Implement loadView to create a view hierarchy programmatically, without using a nib.
- (void)loadView
*/
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
#pragma mark Table View Control Methods
- (void)viewDidLoad
NSArray *array = [[NSArray alloc] initWithObjects:@"sleepy1",@"sleepy2",@"sleepy3",@"sleepy4",@"sleepy5",@"sleepy6",@"sleepy7",
@"sleepy8",@"sleepy9",@"sleepy10",@"sleepy11",@"sleepy12",nil];
self.listData = array;
[array release];
[super viewDidLoad];
// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationPortrait);
- (void)didReceiveMemoryWarning
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
- (void)dealloc
[listData release];
[super dealloc];
#pragma mark -
#pragma mark Table View Data Source Methods
-(NSInteger)tableView:(UITableView *)tableView
numberOfRowsInSection:(NSInteger)section
return [self.listData count];
-(UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
static NSString *SimpleTableIdentifier = @"SimpleTableIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:SimpleTableIdentifier];
if (cell == nil)
[[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:SimpleTableIdentifier] autorelease];
NSUInteger row = [indexPath row];
cell.text = [listData objectAtIndex:row];
return cell;
/*
- (void)viewDidUnload
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
*/
@end
这是日志
2011-05-24 20:08:19.651 Table[4699:207] *** Assertion failure in -[UITableView _createPreparedCellForGlobalRow:withIndexPath:], /SourceCache/UIKit_Sim/UIKit-1447.6.4/UITableView.m:5613
2011-05-24 20:08:19.654 Table[4699:207] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'UITableView dataSource must return a cell from tableView:cellForRowAtIndexPath:'
*** Call stack at first throw:
(
0 CoreFoundation 0x00da8be9 __exceptionPreprocess + 185
1 libobjc.A.dylib 0x00efd5c2 objc_exception_throw + 47
2 CoreFoundation 0x00d61628 +[NSException raise:format:arguments:] + 136
3 Foundation 0x000ac47b -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 116
4 UIKit 0x003258f3 -[UITableView(UITableViewInternal) _createPreparedCellForGlobalRow:withIndexPath:] + 883
5 UIKit 0x0031b77f -[UITableView(UITableViewInternal) _createPreparedCellForGlobalRow:] + 75
6 UIKit 0x00330450 -[UITableView(_UITableViewPrivate) _updateVisibleCellsNow:] + 1561
7 UIKit 0x00328538 -[UITableView layoutSubviews] + 242
8 QuartzCore 0x01c66451 -[CALayer layoutSublayers] + 181
9 QuartzCore 0x01c6617c CALayerLayoutIfNeeded + 220
10 QuartzCore 0x01c5f37c _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 310
11 QuartzCore 0x01c5f0d0 _ZN2CA11Transaction6commitEv + 292
12 UIKit 0x002b419f -[UIApplication _reportAppLaunchFinished] + 39
13 UIKit 0x002b4659 -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 690
14 UIKit 0x002bedb2 -[UIApplication handleEvent:withNewEvent:] + 1533
15 UIKit 0x002b7202 -[UIApplication sendEvent:] + 71
16 UIKit 0x002bc732 _UIApplicationHandleEvent + 7576
17 GraphicsServices 0x016dea36 PurpleEventCallback + 1550
18 CoreFoundation 0x00d8a064 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 52
19 CoreFoundation 0x00cea6f7 __CFRunLoopDoSource1 + 215
20 CoreFoundation 0x00ce7983 __CFRunLoopRun + 979
21 CoreFoundation 0x00ce7240 CFRunLoopRunSpecific + 208
22 CoreFoundation 0x00ce7161 CFRunLoopRunInMode + 97
23 UIKit 0x002b3fa8 -[UIApplication _run] + 636
24 UIKit 0x002c042e UIApplicationMain + 1160
25 Table 0x000027c8 main + 102
26 Table 0x00002759 start + 53
27 ??? 0x00000001 0x0 + 1
)
terminate called after throwing an instance of 'NSException'
Program received signal: “SIGABRT”.
(gdb)
【问题讨论】:
【参考方案1】:您没有分配您的单元格。你需要...
cell = [[[UITableViewCell alloc] initWithFrame:CGR.........etc
【讨论】:
-0.5 因为Deprecated in ios 3.0
。你应该使用- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
我指出了代码中的错误,而不是方法是否应该不同。如果这是 OS3.0 之前的遗留代码怎么办?!
我没有意识到问题中已经使用了已弃用的初始化程序。很抱歉虚拟的反对票。以上是关于表视图不断给出 NSException 和崩溃的主要内容,如果未能解决你的问题,请参考以下文章
以 NSException Timer Swift Crash 类型的未捕获异常终止
Swift - 启动屏幕后游戏崩溃并且无法转换到 GameScene NSException 错误