EXE_BAD_ACCESS NSSearchPathForDirectoriesInDomains

我正在为另一家公司开发的iOS应用程序开发新版本,但现在是我的责任。 我一般都不太了解目标C和iOS开发的经验,但是我会尽我所能地尽力expression我的问题。

我有以下方法,我在改进过程中既没有改变也没有改变:

- (Boolean)ShouldWeDownloadImage:(NSString*)p_ImageName { NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *filePath = [NSString stringWithFormat:@"%@/%@", [paths objectAtIndex:0], p_ImageName]; NSFileManager *fileManager = [NSFileManager defaultManager]; if (!([fileManager fileExistsAtPath:filePath])) return true; NSDate *creationDate = [[fileManager attributesOfItemAtPath:filePath error:nil]objectForKey:NSFileCreationDate]; NSDate *currentDate = [NSDate date]; NSCalendar *gregorian = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar]; NSDateComponents *dateComponents = [gregorian components:NSMonthCalendarUnit fromDate:creationDate toDate:currentDate options:0]; if ([dateComponents month] > MaxAgeOfDownloadedImage) return true; return false; } 

这个特定的方法被调用了很多。 我的意思是很多 实际上是几十(甚至上百)次短暂的inheritance。 那么调用它的方法以及调用它的方法也是如此。 我的问题是,每当我开始我的应用程序,它开始下载任何所需的图像马上,几秒钟后,应用程序就会崩溃,当我在一台实际的设备上运行它。 但模拟器是好的,运行应用程序没有任何问题。 值得注意的是,模拟器运行iOS7,我testing的物理设备运行iOS6。 我没有其他设备可以testing。

当应用程序崩溃时,我在这个方法的第一行得到一个EXC_BAD_ACCESS消息。 怀疑这可能是因为这个方法的后续调用以及对内存使用的影响,我将paths数组的定义移动到了另一个类中,永久存储它,并将其传递给此方法一个参数。 我这样做后,应用程序不再坠毁的第一行,但在NSCalendar的定义。 我认为这个应用程序可以在没有时间戳的情况下进行检查,并将这些代码注释掉,但是一旦我这样做了,方法的新第一行(filePath的定义)就会使应用程序崩溃。

最好的部分是:如果我拿出所有这些代码,并从这个方法返回true,那么这个应用程序就可以正常工作,这使我相信不pipe怎么说,这个方法是错误的,只有这个方法是错误的。

值得注意的是:该项目被转换为ARC来尝试帮助解决这个问题,但无济于事。 我也尝试启用僵尸对象给我更多的信息,但即使打开了debugging,我也找不到任何有用的信息。

有谁知道这种方法可能做错了什么,以及如何解决它? 只要返回true将使应用程序可用,但它不会是一个可接受的解决scheme,因为这将意味着它会下载我的用户昂贵的数据计划的大量不必要的数据。