我正试图通过自定义nib文件来处理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];
在上述方法中。我在这里做错了什么?
答案 0 :(得分:4)
除了来自@Seega的关于你的笔尖名称的评论,这似乎是合理的,你在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
。
答案 1 :(得分:1)
我认为你应该使用字符串参数“nibName”而不是@“View”
NSArray *nibContents = [[NSBundle mainBundle] loadNibNamed:nibName owner:self options:NULL];
答案 2 :(得分:1)
我的代码中存在许多问题,正如人们所指出的那样。导致我在标题中讨论的实际问题的问题在IB中是一个问题:我有引用文件所有者而不是实际对象的出口。
但是我把这个给比尔,因为他解决了最多的错误......