Ios 调试时查看Xcode中的对象/属性状态

Ios 调试时查看Xcode中的对象/属性状态,ios,objective-c,xcode,debugging,Ios,Objective C,Xcode,Debugging,所以我是Xcode新手,在一个iOS项目上工作,我在最基本的调试方面玩得很开心。具体地说,我需要能够在逐步完成代码的过程中查看对象的状态(这不疯狂,是吗?),但我一辈子都不知道如何在Xcode中做到这一点 每当我尝试时,我得到的似乎是一个无法扩展以显示其目标内容的内存地址。我也无法找到任何方法,甚至可以在调试控制台中手动取消对指针的引用,以查看该对象的状态 在这里,我试图查看store.storeHours数组的内容,但一点运气都没有。事实上,左边的视图告诉我数组中有0个对象,当我尝试扩展它时,

所以我是Xcode新手,在一个iOS项目上工作,我在最基本的调试方面玩得很开心。具体地说,我需要能够在逐步完成代码的过程中查看对象的状态(这不疯狂,是吗?),但我一辈子都不知道如何在Xcode中做到这一点

每当我尝试时,我得到的似乎是一个无法扩展以显示其目标内容的内存地址。我也无法找到任何方法,甚至可以在调试控制台中手动取消对指针的引用,以查看该对象的状态

在这里,我试图查看
store.storeHours
数组的内容,但一点运气都没有。事实上,左边的视图告诉我数组中有0个对象,当我尝试扩展它时,它不会显示任何内容,但是当我
po store.storeHours
时,控制台显示7个对象,尽管它们被描绘成内存地址是无用的

请告诉我我没有疯,我只是错过了一些东西

更新:所以事情变得更加奇怪!当我突然将变量显示切换到“本地”而不是“自动”时,
self.store.storeHours
变得完全可导航!我想知道是否在访问正确的“storeHours”实例时出现了问题,因为现在查看时,它清楚地标识了数组中的7个对象!更不用说像我最初希望的那样,对象是可扩展的


实例本身实际上提供了这些信息。您需要为自定义类实现从
NSObject
继承的方法,以便它们能够将自己打印为内存地址以外的内容(这是
NSObject
的实现所做的)

我不知道你的
Hours
类有什么属性,但这很简单,比如:

- (NSString *)description
{
    return [NSString stringWithFormat:@"Open: %i Close: %i", self.openTime, self.closeTime];
}
该方法只需返回一个
NSString
,其中包含您认为在检查对象时需要查看的重要信息

当您在
NSLog()中使用
%@
格式说明符时,类也是这样表示自己的

-(NSString*)description{
    //Return a string in whatever way you like to describe this instance. That is what xcode debugger reads. 
    //This is implemented in the parent to return the address, that's why you see that way.
}

在您的示例中,store.storeHours是一个空的NSArray。所以,很自然,你不能看里面

为使调试器更清晰,请尝试添加一个方法(从NSObject继承)


您的对象,如
Hours
,可以告诉您有关其内容的更多信息。另请参见
debugDescription

Hours
是您的自定义类吗?请参见我也会这么想,但它不是空的,在调试时,for..in循环迭代7个对象,但除非我在控制台中显式地
po
storeHours,否则我看不到有7个对象。非常混乱。您是否使用最新版本的Xcode@chaiguy?LLDB一开始在查看IVAR方面有点问题。我认为这是最新的版本(4.5.2(4G2008a))。控制台显示(gdb),但这可能意味着我没有使用LLDB?好的,这绝对是一个开始。我至少可以看到现在的小时对象是什么。不幸的是,默认的NSObject实现不能以通用的方式递归地显示属性和值。我猜Obj-C对于这类东西来说太低了。运行库中有内省功能,所以实际上,对象可以直接吐出它的所有属性,不管它们是什么:@chaiguy看看kendall helmstetter gelner关于正确内省的超级有用的答案(这就是你所要求的);@JoshCaswell,知道这一点很好。也许我可以在我的项目中以某种可重用的方式利用运行时内省。你能对这个答案进行一点扩展吗?
 - (NSString*) description