私はcoredataを使用していますが、管理対象オブジェクトのプロパティの1つがnullになるため、アプリがクラッシュすることがよくあります。たとえば、UILabel
aのテキストを管理対象オブジェクトのテキストプロパティに設定すると、次のように表示され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を表示したり、クラッシュしたりします。いくつかのNSAssertを追加した問題を見つけました。上記の出力と同じ実行で以下のコードを実行すると、アサーションに失敗しました。これがアサートコードです(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)'
(データを変更せずに)アプリを再度実行すると、正常に動作します。それが何であるかについて何か考えはありますか?