Iphone 无法找出我使用NSKeyedArchivers/NSKeyedUnachivers时应用程序崩溃的原因

Iphone 无法找出我使用NSKeyedArchivers/NSKeyedUnachivers时应用程序崩溃的原因,iphone,objective-c,uitableview,nskeyedarchiver,nscoding,Iphone,Objective C,Uitableview,Nskeyedarchiver,Nscoding,我正在开发我的第一款iphone“日记”应用程序,它使用定制的“条目”对象,包含NSString标题、NSString文本和NSDate creationDate。当我尝试归档条目对象的NSMutableArray,并在下次加载视图时检索它们时,应用程序崩溃。我已经阅读了大量使用NSKeyedArchiver的示例代码和示例,但仍然无法理解为什么会发生这种情况。我猜保存条目但不确定的数组的初始化有问题 这是代码,也许你可以找到一些我一直在监督的东西……” 非常感谢。您不应该在viewDidLoa

我正在开发我的第一款iphone“日记”应用程序,它使用定制的“条目”对象,包含NSString标题、NSString文本和NSDate creationDate。当我尝试归档条目对象的NSMutableArray,并在下次加载视图时检索它们时,应用程序崩溃。我已经阅读了大量使用NSKeyedArchiver的示例代码和示例,但仍然无法理解为什么会发生这种情况。我猜保存条目但不确定的数组的初始化有问题

这是代码,也许你可以找到一些我一直在监督的东西……”


非常感谢。

您不应该在
viewDidLoad
中释放
array
,因为您不拥有它

请查看,因为您的代码中还有一些其他内存管理问题。特别是

self.title = [[aDecoder decodeObjectForKey:@"title"] retain];
self.text = [[aDecoder decodeObjectForKey:@"text"] retain];
self.created = [[aDecoder decodeObjectForKey:@"created"] retain];

在您的
initWithCoder:
方法中,假设属性是retain或copy,则所有泄漏。

当您使用NSKeyedUnarchivers读回数组时,总是会得到一个不可更改的副本。您需要将*array声明为NSArray,或者干脆一起删除数组

entriesArray = [[unarchiver decodeObjectForKey:@"entriesArray"] mutableCopy]; 

@JeremyP指出了另一个问题。因为你没有分配或保留*数组,所以你不应该发布它。

谢谢,我会研究一下。特别是,应用程序在加载时崩溃了。我可以使用断点跟踪到那里,但不清楚具体是哪一行导致了它。我最初的标题和文本是NSStr我把“保留”改为“复制”。谢谢。
entriesArray = [[unarchiver decodeObjectForKey:@"entriesArray"] mutableCopy];