gdb: вызывать методы доступа на подклассе NSManagedObject? - PullRequest
8 голосов
/ 24 апреля 2011

У меня есть класс Song, который является подклассом NSManagedObject.Я использую GDB, чтобы попытаться выяснить проблему, с которой я сталкиваюсь, и мне трудно вызывать метод доступа в моем классе, используя gdb.

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?

Ответы [ 2 ]

26 голосов
/ 11 мая 2011

Вы можете получить динамически сгенерированные свойства в gdb, используя метод valueForKey:, как в [aSong valueForKey:@"title"]. (Этот метод работает и для синтезированных свойств, если вы мазохист, но на самом деле он полезен только при проверке NSManagedObject и его подклассов.)

3 голосов
/ 24 апреля 2011

К сожалению, именно так gdb ведет себя. Вместо того, чтобы спрашивать объект, будет ли он реагировать на селектор, он, похоже, просто смотрит на реализацию объекта либо сейчас , либо во время компиляции (который еще не определен) , Поскольку атрибуты Core Data обрабатываются в процессе пересылки сообщений, отладчик не верит, что NSManagedObject ответит на селекторы атрибутов.

Это, вероятно, стоит сообщить об ошибке в Apple, чтобы они могли исправить отладчик.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...