我试图摆脱与自定义的笔尖文件做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/

10-14 22:01