我发现了类似的问题,但是-containsObject
无法正常工作。
我的问题是NSMutableArray -containsObject
方法在不应该返回true的情况下,
尝试生成随机UNIQUE颜色并将其添加到数组时。
检查NSMutableArray
是否包含具有相同值的对象的最佳方法是什么。
NSMutableArray *color_arr=[NSMutableArray array];
UIColor *t;
for(int i=0; i<100; i+=1)
{
int r = arc4random()%256;
int g = arc4random()%256;
int b = arc4random()%256;
t=[UIColor colorWithRed:r green:g blue:b alpha:255];
if (![color_arr containsObject:t])
[color_arr addObject:t];
//[t release];//is t need to be released here on non-arc project? well Im not sure.
}
NSLog(@"total:%d",[color_arr count]);
NSLog()
始终表示数组计数为1。 最佳答案
新编辑:
您的for()
循环的结构也是错误的。您需要在循环开始之前声明UIColor。您应该在循环开始后声明颜色:
for (i=0;i<100;i++) {
int rInt = arc4random()%256;
float rFloat = (float)rInt/255.0f;
//same with gInt, bInt
//make gFloat and bFloat this way
UIColor *t = [UIColor colorWithRed:rFloat green:gFloat blue:bFloat alpha:1];
if (![color_arr containsObject:t]) {
[color_arr addObject:t];
}
NSLog(@"%i",color_arr.count);
}
UIColor不使用
integer
值,而是使用float
值。尝试将integer
除以255,然后将其设置为r,g,b。喜欢:
int rInt = arc4random()%256;
float rFloat = (float)rInt/255.0f;
//same with gInt, bInt
//make gFloat and bFloat this way
t = [UIColor colorWithRed:rFloat green:gFloat blue:bFloat alpha:1];
关于objective-c - NSMutableArray containsObject返回true,但不应,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18338352/