我正在使用 coredata 并且我的应用程序经常崩溃,因为托管对象的属性之一结果为空。例如,当我将a 的文本设置UILabel
为托管对象的文本属性时,它显示NULL
为了找到问题,我覆盖了将 NSManagedObject 分配给实例变量的设置器。在设置器中,我使用 NSLog 打印对象:
NSLog(@"TSC: setting segment: %@", segment);
它的输出:
2012-11-05 21:01:56.758 JetLagged[4505:907] TSC: setting segment: <Segment: 0x1d0ab790> (entity: Segment; id: 0x1d0a7f60 <x-coredata://BF6F2D98-0658-4005-8BEF-9FE6B398AF86/Segment/p8> ; data: {
arrivalDate = "2012-11-11 05:00:17 +0000";
arrivalLeg = "0x1d0abba0 <x-coredata://BF6F2D98-0658-4005-8BEF-9FE6B398AF86/IteneryLeg/p11>";
departureDate = "2012-11-10 19:00:17 +0000";
departureLeg = "0x1d0abba0 <x-coredata://BF6F2D98-0658-4005-8BEF-9FE6B398AF86/IteneryLeg/p11>";
iteneryLegs = (
"0x1d0abba0 <x-coredata://BF6F2D98-0658-4005-8BEF-9FE6B398AF86/IteneryLeg/p11>"
);
trip = "0x1c58add0 <x-coredata://BF6F2D98-0658-4005-8BEF-9FE6B398AF86/Trip/p5>";
})
一切看起来都很好,但是应用程序在某些地方仍然显示 null 或崩溃。我发现了我添加了一些 NSAsserts 的问题,当我在与上面的输出相同的运行中运行下面的代码时,断言失败了。这是断言代码(segmentToCheck 是上面的段)。
NSSet *legs = [segmentToCheck valueForKey:@"iteneryLegs"];
NSAssert([legs count] != 0, @"Error: nolegs %@", legs);
它的输出:
2012-11-05 21:01:56.763 JetLagged[4505:907] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Error: nolegs (null)'
当我再次运行该应用程序(没有任何数据修改)它工作正常。知道它可能是什么吗?