Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 苹果如何';s对象在其描述中显示属性,我可以这样做吗?_Objective C - Fatal编程技术网

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帧的值。