2011-04-24 3 views
8

NSManagedObject를 하위 클래스로하는 Song 클래스가 있습니다. 나는 GDB를 사용하여 문제를 파악하고 gdb를 사용하여 클래스에 접근자를 호출하는 데 어려움을 겪고있다.gdb : NSManagedObject 하위 클래스에서 접근 자 메서드 호출?

Song.h :

@property (nonatomic, retain) NSString * title; 

Song.m : 나는를 사용하여 값을 인쇄하려고하면 디버거에서

@dynamic title; 

, 나는, 개체에 "제목"필드를 참조 접근 자, 런타임에 올바르게 이해하면 오류가 발생합니다.

(gdb) po aSong <Song: 0x59188d0> 
(entity: Song; id: 0x59162d0 
<x-coredata://99BE63F8-840A-47B5-A259-BCD74E1811C4/Song/p2> 
; data: { 
    composers = "<relationship fault: 0x4d62f30 'composers'>"; 
    dateCreated = nil; 
    songLists = "<relationship fault: 0x59243c0 'songLists'>"; 
    title = "cancel?"; }) 
(gdb) p aSong.title There is no member named 
title. 
(gdb) p [aSong title] 
Target does not respond to this message selector. 

기회가 있습니다. 정말 바보 같은 일을하지만, 내가 뭘 잘못하고 있니? 객체를 인트로 스페 밍하고 GDB를 사용하여 어떤 메시지가 응답하는지 보는 방법이 있습니까?

+0

'p aSong-> title'을 사용해 보셨나요? –

답변

3

슬프게도, 이것은 gdb의 동작 방식입니다. 객체를 선택기에 응답할지 여부를 묻는 대신 컴파일 시간에 또는 (아직 처리하지 못했습니다) 객체의 구현을 살펴 보는 것만 같습니다. 메시지 전달 프로세스 중에 핵심 데이터 특성이 처리되기 때문에 디버거는 NSManagedObject이 특성 선택기에 응답 할 것이라고 생각하지 않습니다.

이것은 Apple에 버그로보고 할 가치가있어 디버거를 수정할 수 있습니다.

+0

감사합니다. NSLog 문을 사용하여이 작업을 확인했습니다. –

26

과 같이 valueForKey: 메서드를 사용하면 gdb에서 동적으로 생성 된 속성에 액세스 할 수 있습니다. (이 기법은 당신이 masochist 인 경우에도 합성 속성에 대해 작동하지만, 실제로는 NSManagedObject 및 그 하위 클래스를 검사 할 때만 유용합니다.)

+3

올바른 것으로 확인해야합니다! – jessecurry

관련 문제