此问题可能是关闭基地,但这里是我遇到的问题:

我试图从iPhone SDK运行一个实例,我运行到访问冲突。我跟踪了一些问题,我认为是可疑的。

下面是类的样子:

@interface TableViewCell : UITableViewCell {

@private    
    UILabel *_earthquakeLocationLabel;
    UILabel *_earthquakeDateLabel;
    UILabel *_earthquakeMagnitudeLabel;
    UIImageView *_magnitudeImageView;
}

当我在设置断点

- (id)initWithFrame:(CGRect)frame reuseIdentifier:(NSString *)reuseIdentifier

和看在调试器“自我”,它表明_earthquakeDateLabel是“0×12”,_earthquakeMagnitudeLabel是0x1000的,而另外两个是零。如果我试图给任何非零的人的,我得到一个访问冲突。

我猜发生了什么事是,这些在他们伪造的值,当我试图给他们,试图减小对虚假值的引用,并炸毁。但正如我说,我是相当新的目标C,所以可能会关闭位置。

所以我的问题是,是否有什么特别的初始化这些值是我应该做的事?或任何方式分配给值时,它在它有一个假的值?


一些额外的信息:

所以,如果我在初始化分配零到_earthquakeDateLabel和_earthquakeMagnitudeLabel,能解决问题。但我不明白为什么对象是与这些字段的值创建的;我希望他们是零。被在堆上创建的对象:

TableViewCell *cell = [[[TableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:MyIdentifier] autorelease];

没有正确的解决方案

其他提示

这听起来像self指针是伪造的。值0×12和0×1000是积分常数;他们绝对不是指针到有效的内存地址。您看到这些值的事实表明,什么是错的,并试图操纵他们以任何方式(读或写他们)会导致不良。在这种情况下,你得到一个访问冲突,因为你试图写入内存地址0×12和0×1000,这是无效的地址。

你是如何创建TableViewCell对象吗?你在干什么TableViewCell *myCell = [[TableViewCell alloc] initWithFrame:...]?这是正确的方法。

现在我要调用我的心理调试:我的的是,你忘了用指针来声明TableViewCell对象,即你宣布它作为TableViewCell myCell代替TableViewCell *myCell(注意星号的存在)。这将创建堆栈,而不是堆上的对象,并且作为结果,它将具有代替零在它的数据成员的垃圾。 Objective-C对象,当适当地分配,将在成功调用NULL后具有全部初始化为0的数据成员(或nilfalsealloc,取决于数据类型)的

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top