5

我发现了类似的问题,但-containsObject没有像我预期的那样工作。

我的问题是该NSMutableArray -containsObject方法在尝试生成随机唯一颜色并添加到数组时不应该返回 true。

检查是否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 。

4

1 回答 1

4

新编辑:

你的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值。尝试除以integer255,然后将它们设置为 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];
于 2013-08-20T15:09:41.627 回答