NSDate 被自动释放导致 Bad exe 错误。苹果手机

Posted

技术标签:

【中文标题】NSDate 被自动释放导致 Bad exe 错误。苹果手机【英文标题】:NSDate been released automatically resulting Bad exe error. iPhone 【发布时间】:2011-06-27 20:27:41 【问题描述】:

我花了一整天的时间来研究这个,重写了很多次试图弄清楚它。

我在标题中声明了一组日期

@property (nonatomic, retain)NSDate *time;

在加载视图时,我从数据库中读取了一个字符串,将其转换为日期并将其设置为该变量。

NSDateFormatter *dateFormatter =[[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"dd / MMMM / yyyy"];
time=[dateFormatter dateFromString:datetime]; 

如果我 NSLog 时间我得到预期的日期(虽然不是正确的格式)。如果我随后在视图中进一步使用 NSDate,我会收到 Bad Exe 错误,或者由于时间而导致的错误 = 为零。

我不明白它几乎就像它不保留它一样。

在解决问题时,我在 IBAction 中创建了一个新日期,并尝试复制上面的代码,但在需要的地方,我遇到了同样的问题。我认为这是 dateformat 问题,但我将其格式化为最初编写为字符串的方式。

我做错了什么?我不能再为此浪费一天了。

欢呼

【问题讨论】:

【参考方案1】:

您需要将该属性设为self.time = [dateFormatter dateFromString:datetime];[self setTime: [dateFormatter dateFromString:dateTime]]

如果你只是用=赋值而不用self,它不会保留它,它只会传递指针。使用点运算符将使其保留它。

【讨论】:

非常感谢。恼人的事情就是这么简单。这也是解释为什么!非常感谢。【参考方案2】:

问题是,您没有设置属性。 time 没有使用点符号。您要么必须将其写为(假设该属性存在于 self 上),它是以下两种方式之一:

self.time = [dateFormatter dateFromString:datetime];

[self setTime: [dateFormatter dateFromString:datetime]];

【讨论】:

【参考方案3】:

您需要使用

将其分配给您的属性
self.time = [dateFormatter dateFromString:datetime];

否则不会保留

【讨论】:

哇 - 1 分钟内有四个几乎相同的答案 :-)【参考方案4】:

尝试使用 self.time ,这将通过生成的 setter 方法,该方法将保留日期,此时您只是将其分配给实例变量。

【讨论】:

【参考方案5】:

您需要使用:self.time = [dateFormatter dateFromString:datetime];

【讨论】:

以上是关于NSDate 被自动释放导致 Bad exe 错误。苹果手机的主要内容,如果未能解决你的问题,请参考以下文章

释放对象导致 exc_bad_access

为啥在构造函数中释放会导致 EXC_BAD_ACCESS?

以“new”前缀开头的属性名称导致 iOS 中的 BAD_ACCESS 错误

NSDate 内存管理使用 ARC Over Release

Objective-C:内存泄漏与自动释放的多重分配?

一直可靠工作的时间戳功能只是导致 EXC_BAD_INSTRUCTION