我试图摆脱与自定义的笔尖文件做UITableViewCell的子类的窍门。
子类的名称是MyCustomCell。 .xib文件只有一个带有单个UILabel“cellTitle”的UITableViewCell,并且我已将其连接到UITableViewCell子类中的插座。
在返回单元格的MyCustomCell中的类中,我在以下行上收到SIGABRT错误:
NSArray *nibContents = [[NSBundle mainBundle] loadNibNamed:@"View" owner:self options:NULL];
这是cellForRowAtIndexPath的实现:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *kCustomCellID = @"MyCellID";
myCustomCell *cell = (myCustomCell *)[tableView dequeueReusableCellWithIdentifier:kCustomCellID];
if (cell == nil)
{
cell = (myCustomCell *)[myCustomCell cellFromNibNamed:@"myCustomCell"];
}
//TODO: Configure Cell
return cell;
}
这是myCustomCell cellFromNibNamed的实现:
+ (myCustomCell *)cellFromNibNamed:(NSString *)nibName
{
NSArray *nibContents = [[NSBundle mainBundle] loadNibNamed:@"View" owner:self options:NULL];
NSEnumerator *nibEnumerator = [nibContents objectEnumerator];
myCustomCell *customCell = nil;
NSObject* nibItem = nil;
while ((nibItem = [nibEnumerator nextObject]) != nil)
{
if ([nibItem isKindOfClass:[myCustomCell class]])
{
customCell = (myCustomCell *)nibItem;
break; // we have a winner
}
}
return customCell;
}
我在行中收到SIGABRT错误
NSArray *nibContents = [[NSBundle mainBundle] loadNibNamed:@"View" owner:self options:NULL];
在上述方法中。我在这里做错了什么?
最佳答案
除了@Seega中有关您的笔尖名称的注释似乎合理之外,您在笔尖加载代码中还存在很多问题;
+ (myCustomCell *)cellFromNibNamed:(NSString *)nibName
{
NSArray *nibContents = [[NSBundle mainBundle] loadNibNamed:@"View" owner:self options:NULL];
NSEnumerator *nibEnumerator = [nibContents objectEnumerator];
myCustomCell *customCell = nil;
NSObject* nibItem = nil;
while ((nibItem = [nibEnumerator nextObject]) != nil)
{
if ([nibItem isKindOfClass:[myCustomCell class]])
{
customCell = (myCustomCell *)nibItem;
break; // we have a winner
}
}
return customCell;
}
您的
customCell
实例为nil,因此向其发送class
方法为空操作,并返回nil。在这种情况下,isKindOfClass:
不会返回您的想法。另外,不要遍历从
loadNibNamed:owner:options:
方法返回的对象的列表。而是在文件所有者和笔尖文件中的单元之间创建连接,以便在笔尖加载时设置该连接。然后将代码更改为如下所示;+ (myCustomCell *)cellFromNibNamed:(NSString *)nibName {
[[NSBundle mainBundle] loadNibNamed:nibName owner:self options:NULL];
myCustomCell *gak = self.theFreshlyLoadedCustomCellThingSetUpInIB;
// clean up
self.theFreshlyLoadedCustomCellThingSetUpInIB = nil;
return gak;
}
同样,用小写字母命名类是非典型的。其他阅读您的代码的人会认为这是变量而不是类。改名为
MyCustomCell
。关于ios - 自定义UITableViewCell:“loadNibNamed:”上的SIGABRT,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6898060/