Iphone 添加自定义UITableViewCell会使模拟器崩溃
我正在尝试使用自定义的Iphone 添加自定义UITableViewCell会使模拟器崩溃,iphone,objective-c,cocoa,xcode,macos,Iphone,Objective C,Cocoa,Xcode,Macos,我正在尝试使用自定义的UITableViewCell构建我的应用程序。这是myUIViewController中的代码,用于将viewCell添加到表中: - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { NSLog(@"------- Tableview --------"); static NSString
UITableViewCell
构建我的应用程序。这是myUIViewController
中的代码,用于将viewCell
添加到表中:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"------- Tableview --------");
static NSString *myIdentifier = @"MyIdentifier";
MyTableCell *cell = (MyTableCell *)[tableView dequeueReusableCellWithIdentifier:myIdentifier];
if(cell == nil) {
NSArray *cellView = [[NSBundle mainBundle] loadNibNamed:@"tblCellView" owner:self options:nil];
cell = [cellView objectAtIndex:0];
}
[cell setLabelText:[NSString stringWithFormat:@"indexpath.row: %d", indexPath.row]];
//cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:myIdentifier] autorelease];
cell.textLabel.text = @"bös";
return cell;
}
如果我取消对“return cell”上方的行的注释,它将返回一个常规的UITableViewCell
,没有任何错误,但一旦我尝试实现我的自定义单元格,它就会崩溃,出现以下错误:
-------Tableview------2010-04-23 11:17:33.163高尔夫[26935:40b]*在-[UITableView]中断言失败
_createPreparedCellForGlobalRow:withIndexPath:,/SourceCache/UIKit_Sim/UIKit-984.38/UITableView.m:4709 2010-04-23
11:17:33.164高尔夫[26935:40b]*由于未捕获而终止应用程序
异常“NSInternalInconsistencyException”,原因:“UITableView”
数据源必须从tableView返回单元格:cellForRowAtIndexPath:'
2010-04-23 11:17:33.165高尔夫球[26935:40b]堆叠:(
我已使用正确的输出口配置了.xib文件。UITableViewCell的标识符与我试图从NSBundle加载的名称相对应。我看不到在哪里声明了
tblCell
,这可能是代码的许多问题之一。首先,您需要执行以下操作:
if (cell == nil) {
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:CellIdentifier owner:self options:nil];
cell = (MyTableCell *)[nib objectAtIndex:0];
}
您只是加载nib,但从未从中提取单元格
--更新--
您还应该检查IB中的自定义单元格是否有任何错误或不正确的绑定。我看不到在哪里声明了
tblCell
,这可能是您的代码的许多问题之一。首先,您需要执行以下操作:
if (cell == nil) {
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:CellIdentifier owner:self options:nil];
cell = (MyTableCell *)[nib objectAtIndex:0];
}
您只是加载nib,但从未从中提取单元格
--更新--
您还应该检查IB中的自定义单元格是否有任何错误或不正确的绑定。我认为
loadNibNamed:
nethod出于某种原因返回nil。因此,结果单元格对象也返回nil。我认为loadNibNamed:
nethod出于某种原因返回nil。因此,结果单元格对象也返回nil。您还应该确保将Interface Builder中的自定义类类型设置为相应的类名(在您的示例中为MyTableCell
),否则强制转换也将不起作用。您还应确保将Interface Builder中的自定义类类型设置为相应的类名(在您的示例中为MyTableCell
),否则强制转换也将无法工作。我创建此定义是为了提供帮助
#define LoadViewNib(__NIBNAME__) [[[NSBundle mainBundle] loadNibNamed:__NIBNAME__ owner:self options:nil] objectAtIndex:0]
对于使用,您只能这样做
if(cell == nil) {
cell = LoadViewNib(@"MyCellNibName");
}
我创建这个定义是为了帮助您
#define LoadViewNib(__NIBNAME__) [[[NSBundle mainBundle] loadNibNamed:__NIBNAME__ owner:self options:nil] objectAtIndex:0]
对于使用,您只能这样做
if(cell == nil) {
cell = LoadViewNib(@"MyCellNibName");
}
参考:
如果您正在加载自己的自定义单元格,则“要为此过程的编程部分设置的一个重要属性是每个对象的标记属性。请在属性窗格的视图部分中找到此属性,并为每个对象指定一个唯一的整数。”
现在像这样检索标签
(我假设您将tag=1指定给label)
参考:
如果您正在加载自己的自定义单元格,则“要为此过程的编程部分设置的一个重要属性是每个对象的标记属性。请在属性窗格的视图部分中找到此属性,并为每个对象指定一个唯一的整数。”
现在像这样检索标签
(我假设您将tag=1指定给label)
对不起,这是旧代码。我现在更新了我的原始问题。请尝试将其转换为(MyTableCell*)对不起,这是旧代码。我现在更新了我的原始问题。尝试将其转换为(MyTableCell*)尝试将其转换为(MyTableCell*))别忘了导入.m文件中的自定义单元格并与自定义单元格绑定。还要检查tableview委托的数据源。尝试将其强制转换为(MyTableCell*)别忘了在.m文件中导入自定义单元格,并与自定义单元格绑定。此外,还要检查tableview委托的数据源。这是一个老问题,但我相信这是我问题的解决方案,因此我将此标记为答案。我有一个类似的问题,这个答案让我找到了它。我忘了将文件所有者的类型设置为我的viPhone xib中的视图控制器,所以我只在iPhone上崩溃。这是一个老问题,但我相信这是我问题的解决方案,所以我将此标记为答案。我有一个类似的问题,这个答案让我找到了它。我忘了在iPhone xib中将文件所有者的类型设置为我的视图控制器,所以我只在iPhone xib中崩溃在iPhone上。