【问题标题】:filteredArrayUsingPredicate raises EXC_BAD_ACCESS on iphone5 not on iphone6filtersArrayUsingPredicate 在 iphone 5 上引发 EXC_BAD_ACCESS 而不是在 iphone 6 上
【发布时间】: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


【解决方案1】:

我的 Event 类将 dateOfTheEvent 属性声明为 (nonatomic, **assign**),因此在 segue 之后它没有保存在目标视图控制器中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多