【发布时间】:2015-07-16 10:33:22
【问题描述】:
我有这个:
// self.theWholeEventsArray is NSMutableArray * populated properly after segue
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy/MM/dd@hh:mm"];
NSDate *startDate = [dateFormatter dateFromString:@"2015/05/29@00:00"];
NSDate *endDate = [dateFormatter dateFromString:@"2015/06/03@00:00"];
NSPredicate *tmpPred = [NSPredicate predicateWithFormat:@"(%K => %@) AND (%K =< %@)", @"dateOfTheEvent", startDate, @"dateOfTheEvent", endDate];
NSArray *selectedDateArray = [self.theWholeEventsArray filteredArrayUsingPredicate:tmpPred];
它在 iphone6 和 iPad 上完美运行,但在 iphone5 和 iphone4s 上因 EXC_BAD_ACCESS code=1 而崩溃。我也在模拟器和设备上看到了这个问题。 谁能解释一下为什么以及如何解决这个崩溃?
【问题讨论】:
-
您好,它在 iPhone5 模拟器中运行良好。你能把完整的错误贴在这里吗?
-
我添加了 NSZombieEnabled 支持,但出现此错误:2015-05-06 12:49:10.542 tjf[9012:193121] *** -[__NSDate compare:]: message sent to deallocated instance 0x786e96c0 .我无法理解 0x786e96c0 是哪个对象。显然,它每次都会改变......
-
我不知道为什么这会发生在某些设备上而不是其他设备上,除非 iOS 在内存较少的较低设备上发出内存警告。崩溃消息很清楚:似乎在您的数组中的某个地方,
NSDate对象在它们应该被释放之前就被释放了。我假设您有大量具有日期属性的自定义Event对象?如果是这样,您在任何时候都记住了多少? -
在所有 Objective-C 异常上设置断点并查看崩溃时堆栈跟踪的样子。
-
@RASS,也谢谢你。看到 dateOfTheEvent 属性是(非原子的,assign),我很惊讶,不强!!!我用for循环而不是filteredArrayUsingPredicate解决了这个问题,发现dateOfTheEvent是一个僵尸......谢谢大家!
标签: ios objective-c nspredicate iphone-5 iphone-6