iOS:自定义单元 lldb 内存访问错误

Posted

技术标签:

【中文标题】iOS:自定义单元 lldb 内存访问错误【英文标题】:iOS: Custom Cell lldb Memory access error 【发布时间】:2013-03-31 20:16:41 【问题描述】:

仍然无法访问要加载到自定义单元格的变量。我有一个名为 InSeasonCell 的 xib、.h、.m。我有一个 IBOutlet InSeasonCell *_cell;在 rootviewcontroller 的 .h 中。访问我的 productAtIndex 值时出现 lldb 错误。任何帮助都会很棒。有人告诉我阅读 Table View Programming Guide。

我创造

_dataController = [[InSeasonProductDataController alloc] init];

它在 rootviewcontroller 中是 init,但传递给另一个对象,该对象用 Product 对象填充它。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

    static NSString *CellIdentifier = @"InSeasonCell";

    InSeasonCell *cell = (InSeasonCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) 
        [[NSBundle mainBundle] loadNibNamed:CellIdentifier owner:self options:nil];
        cell = _cell;
        _cell = nil;
    
    if(_dataController!=nil)
        Product *productAtIndex = [_dataController objectInListAtIndex:indexPath.row];
        // Configure the cell...
            cell.name.text = productAtIndex.name;
            cell.week.text = productAtIndex.week;
            cell.image.image = productAtIndex.image;
    

    return cell;

我查看了我的代码,发现我正在将一个在一个类中创建的对象传递给另一个类。例如:

-(id)initWithDataController:(InSeasonProductDataController *)dataController spinner:      (UIActivityIndicatorView *)spinner
       if(self = [super init])
           _dataController = [dataController retain];
           _spinner = [spinner retain];
       
       return self;

_dataController 稍后在此方法中使用 Product 对象填充并被释放。

【问题讨论】:

这与您之前的问题***.com/questions/15726970/… 有什么不同,您已经接受了答案? 请注意,使用registerNib:... 是加载自定义表格视图单元格的一种更简单的方法,请参见例如***.com/a/15591474/1187415. 好的。谢谢,我去看看。 尝试使用示例,但我得到 -[UITableView registerNib:forCellWithReuseIdentifier:]: unrecognized selector sent to instance。我会继续寻找 registerNib:... 仅适用于 ios >= 5,也许这就是问题所在。 【参考方案1】:

要解决此错误,您需要在 xib 文件中单击单元原型,然后在属性检查 > 标识符中插入与 .m 文件中相同的名称(我写下“单元”):

在方法中:

(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath ………… Cell = [tableView dequeueReusableCellWithIdentifier:@"cell"]; Cell = [[MainCustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];

【讨论】:

【参考方案2】:

我想通了。我的 Product 对象初始化了变量,我必须为传入的每个变量复制一份。这消除了 lldb 错误。

【讨论】:

以上是关于iOS:自定义单元 lldb 内存访问错误的主要内容,如果未能解决你的问题,请参考以下文章

iOS TableView如何访问自定义单元格变量

iOS:如何从 tableview 的自定义单元格中的 UITextField 访问值

自定义 UITableviewCell 放弃内存问题

获取 ios 8 自定义键盘扩展的“因内存错误而终止”

如何使用 LLDB 打印内存地址的内容?

数组和指针,内存之间的关系