CoreData のオブジェクトを lldb の print-object で見てみた

参考にしたのはこのサイト。

とりあえず適当にブレークポイントを置いて lldb のコマンドラインへ。
今回はあり気なこんなコードの所に置いてみた。

NSManagedObject *mobj = [self.fetchedResultsController objectAtIndexPath:indexPath];

で、このオブジェクトの中身だけど、lldb のコマンドラインでこんな感じでサックリ中身が見られる。

(lldb) po mobj
(NSManagedObject *) $10 = 0x087900e0 <DaySleep: 0x87900e0> (entity: DaySleep; id: 0x878d2b0 <x-coredata://7126E583-F5B8-4EE3-A91E-AE29ABBD7315/DaySleep/p124> ; data: {
    dayAllNight = 0;
    dayDate = "2012-06-22 05:30:00 +0000";
    dayDreamLog = nil;
    dayOtherLog = nil;
    daySectionString = "2012-06";
    daySleepStatus = 0;
    dayString = "2012-06-22";
    dayTotalSleepDuration = "4.75";
    sleeps = "<relationship fault: 0x929c1c0 'sleeps'>";
})
(lldb) 

で、リレーションの「sleeps」の中身は valueForKey を使って確認する。

(lldb) po [mobj valueForKey:@"sleeps"]
(id) $12 = 0x0929c1c0 Relationship 'sleeps' fault on managed object (0x87900e0) <DaySleep: 0x87900e0> (entity: DaySleep; id: 0x878d2b0 <x-coredata://7126E583-F5B8-4EE3-A91E-AE29ABBD7315/DaySleep/p124> ; data: {
    dayAllNight = 0;
    dayDate = "2012-06-22 05:30:00 +0000";
    dayDreamLog = nil;
    dayOtherLog = nil;
    daySectionString = "2012-06";
    daySleepStatus = 0;
    dayString = "2012-06-22";
    dayTotalSleepDuration = "4.75";
    sleeps = "<relationship fault: 0x929c1c0 'sleeps'>";
})
(lldb) 

あれ? 変わってないんじゃ…。
とりあえず、sleeps の全てのオブジェクトを見てみると…

(lldb) po [[mobj valueForKey:@"sleeps"] allObjects]
(id) $13 = 0x0d575310 <__NSArrayI 0xd575310>(
<Sleep: 0xd575080> (entity: Sleep; id: 0xd575c10 <x-coredata://7126E583-F5B8-4EE3-A91E-AE29ABBD7315/Sleep/p186> ; data: <fault>)
)

(lldb) 

1つオブジェクトが見つかった。
で、それを確認してみる。

(lldb) po [[[[mobj valueForKey:@"sleeps"] allObjects] lastObject] description]
(id) $16 = 0x09361f50 <Sleep: 0xd575080> (entity: Sleep; id: 0xd575c10 <x-coredata://7126E583-F5B8-4EE3-A91E-AE29ABBD7315/Sleep/p186> ; data: {
    daySleep = "0x878d2b0 <x-coredata://7126E583-F5B8-4EE3-A91E-AE29ABBD7315/DaySleep/p124>";
    endDateTime = "2012-06-22 05:30:00 +0000";
    sleepDuration = "4.75";
    startDateTime = "2012-06-22 00:45:00 +0000";
    targetSleep = 8;
    theDate = "2012-06-22 05:30:00 +0000";
})
(lldb) 

ちゃんと見られた。
最後にもう一回、元のオブジェクトの description を見てみる。

(lldb) po mobj
(NSManagedObject *) $17 = 0x087900e0 <DaySleep: 0x87900e0> (entity: DaySleep; id: 0x878d2b0 <x-coredata://7126E583-F5B8-4EE3-A91E-AE29ABBD7315/DaySleep/p124> ; data: {
    dayAllNight = 0;
    dayDate = "2012-06-22 05:30:00 +0000";
    dayDreamLog = nil;
    dayOtherLog = nil;
    daySectionString = "2012-06";
    daySleepStatus = 0;
    dayString = "2012-06-22";
    dayTotalSleepDuration = "4.75";
    sleeps =     (
        "0xd575c10 <x-coredata://7126E583-F5B8-4EE3-A91E-AE29ABBD7315/Sleep/p186>"
    );
})
(lldb)

sleeps の中身のオブジェクトが表示されてる。
どうやら、一回確認をすると表示されるようになるみたい。