gpt4 book ai didi

ios - 自定义 UITableViewCell : SIGABRT on "loadNibNamed:"

转载 作者:行者123 更新时间:2023-12-01 17:45:39 25 4
gpt4 key购买 nike

我正在尝试使用自定义 nib 文件来完成 UITableViewCell 的子类。

子类的名称是 MyCustomCell。 .xib 文件只有一个带有单个 UILabel“cellTitle”的 UITableViewCell,我已将它连接到 UITableViewCell 子类中的 socket 。

在返回单元格的 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 对您的 Nib 名称的评论(这似乎是合理的)之外,您在 Nib 加载代码中还有很多问题;

+ (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实例为零,因此将其发送到 class方法是无操作并返回 nil。在那种情况下 isKindOfClass:不会返回您的想法。

另外,不要遍历 loadNibNamed:owner:options: 返回的对象列表。方法。而是在文件的所有者和 nib 文件中的单元格之间创建一个连接,以便在 nib 加载时设置它。然后将您的代码更改为如下所示;
+ (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 : SIGABRT on "loadNibNamed:",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6898060/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com