我发现了类似的问题,但是-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/

10-11 11:55