Objective c 苹果如何';s对象在其描述中显示属性,我可以这样做吗?
我有一个具有两个属性的对象-Objective c 苹果如何';s对象在其描述中显示属性,我可以这样做吗?,objective-c,Objective C,我有一个具有两个属性的对象-类型和名称,我想在其说明中显示这两个属性。开箱即用说明如下所示: <SGBMessage: 0x7663bb0> <SGBMessage: 0x7663bb0 type:loadScreen name:mainScreen> 然后我可以得到这样一个很好的描述: <SGBMessage: 0x7663bb0> <SGBMessage: 0x7663bb0 type:loadScreen name:mainScreen>
类型
和名称
,我想在其说明
中显示这两个属性。开箱即用说明如下所示:
<SGBMessage: 0x7663bb0>
<SGBMessage: 0x7663bb0 type:loadScreen name:mainScreen>
然后我可以得到这样一个很好的描述:
<SGBMessage: 0x7663bb0>
<SGBMessage: 0x7663bb0 type:loadScreen name:mainScreen>
到目前为止,一切顺利。但苹果的对象有动态描述;如果查看视图的描述,我会得到以下结果:
<UIView: 0x767bcb0; frame = (0 0; 0 0); layer = <CALayer: 0x767bd50>>
<UIView: 0x767bcb0; frame = (0 0; 0 0); hidden = YES;
layer = <CALayer: 0x767bd50>>
但如果我将“隐藏”设置为true,我会得到以下结果:
<UIView: 0x767bcb0; frame = (0 0; 0 0); layer = <CALayer: 0x767bd50>>
<UIView: 0x767bcb0; frame = (0 0; 0 0); hidden = YES;
layer = <CALayer: 0x767bd50>>
现在,我一点也不相信他们在所有对象的
描述方法中有大量的if语句;似乎更有可能的是,NSObject上某个类别中的某个方法可以被重写,以指定在描述中显示哪些属性。有人知道到底发生了什么吗?如果是的话,这是我可以利用的吗?我倾向于遵循以下模式:
- (NSString *) description {
NSMutableDictionary *descriptionDict = [[NSMutableDictionary alloc]init];
if (account) [descriptionDict setObject:account forKey:@"account"];
if (date) [descriptionDict setObject:date forKey:@"date"];
if (contentString) [descriptionDict setObject:contentString forKey:@"contentString"];
return [descriptionDict description];
}
您可以使用类似的方法构建一个NSMutableArray
,然后遍历该数组,将其中的内容添加到字符串中
对于更复杂的应用程序,如果您有从其他类继承的自定义类,还可以创建一个单独的方法,返回descriptionDict
,然后在子类中调用NSMutableDictionary*descriptionDict=[super descriptionDict]
,并继续向其中添加/删除元素
注意:我在每行使用if
语句的原因是,如果一个对象恰好是nil
,则会引发异常。当您尝试po
您的对象时,这将导致打印“无目标c描述可用”
但是要回答你的问题,没有秘密的方法可以让某些属性出现在描述中。您只需要自己构建一个字符串,无论您选择何种合适的方法。谢谢。这确实是我在问题中提到的“大量if语句集”方法。@Simon唯一的解决方法是创建一个方法,该方法接受一个键数组,检查它们是否被赋值,并返回它们的值。也就是说,与“大量的if语句集”不同,您有一个数组,您可以遍历该数组,并使用键值来观察,使其只有一个“if”语句。@Simon然而,这似乎比必要的更复杂。例如,请参见关于使用KVO获取UIView帧的值。