迭代对象操作或一次更改多个对象

问题描述:

做我正在做的事情的最佳方式是什么? ,badThingXnothin是UILabels。迭代对象操作或一次更改多个对象

NSString *todayNothing = [[todayArray objectAtIndex:0] objectForKey: @"nothing"]; 
if (todayNothing!=NULL) { 
    goodThing1.hidden = YES; 
    goodThing2.hidden = YES; 
    goodThing3.hidden = YES; 
    badThing1.hidden = YES; 
    badThing2.hidden = YES; 
    badThing3.hidden = YES; 
    nothing.text = todayNothing; 
    nothing.hidden = NO; 
} else { 
    goodThing1.hidden = NO; 
    goodThing2.hidden = NO; 
    goodThing3.hidden = NO; 
    badThing1.hidden = NO; 
    badThing2.hidden = NO; 
    badThing3.hidden = NO; 
    nothing.hidden = YES; 
} 

即当该todayNothing有一些文字,我想隐藏6个标签,并显示nothing标签,否则相反。我没有费心去优化这个,但可能会有更多的标签比6现在..

你可以将它们全部放在一个数组中initawakeFromNib或类似的使它更容易迭代后来。

@class MyThing { 

    UIView *theThings[NUM_THINGS]; // ...or use an NSArray if you like that 

} 
@end 

- (id)init // maybe awakeFromNib would be a better place for UI elements 
{ 
    self = [super init]; 
    if (self) { 
    theThings[0] = goodThing1; 
    theThings[1] = goodThing2; 
    theThings[2] = goodThing3; 
    : 
    } 
    return self; 
} 

...再后来你使用一个循环这样

for (int i=0; i<NUM_THINGS; i++) 
    theThings[i].hidden = YES; 
+0

你的意思是'回归自我;'? – kennytm 2010-01-17 18:33:51

+0

@KennyTM啊当然是啊... – epatel 2010-01-17 18:37:31

+0

我使用NSArray而不是'UIView * theThings [NUM_THINGS];'并且我在遍历循环时遇到问题,我在尝试'[theThings objectAtIndex:1]; '我做对了吗? – Dot 2010-01-17 19:29:15

首先,你有一些被称为“布尔变量”。

NSString *todayNothing = [[todayArray objectAtIndex:0] objectForKey: @"nothing"]; 
BOOL todayNothing_has_something = (todayNothing!=nil); // YES if todayNothing!=nil, NO otherwise 
goodThing1.hidden = todayNothing_has_something; 
goodThing2.hidden = todayNothing_has_something; 
goodThing3.hidden = todayNothing_has_something; 
badThing1.hidden = todayNothing_has_something; 
badThing2.hidden = todayNothing_has_something; 
badThing3.hidden = todayNothing_has_something; 
if (todayNothing) 
    nothing.text = todayNothing; 
nothing.hidden = ! todayNothing_has_something; 

其次,最好是使用数组或NSArray来存储所有的good - 和badThing秒。 (见epatel的答案。)

+0

这将代码长度减半,所以我现在要使用它。同时我正在尝试改变NSArray的epatel代码。 – Dot 2010-01-17 19:26:48