NSMutableArray containsObject returns true, but it shouldnt

穿精又带淫゛_ 提交于 2021-02-19 01:39:08

问题


I found similar questions, but -containsObject is not working like I expect.

My problem is the NSMutableArray -containsObject method returns true when it shouldn't, when trying to generate random UNIQUE colors and add to an array.

What is the best way to check if NSMutableArray contains an object with same values.

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]);


The NSLog() always says array count is 1.

回答1:


New Edit:

The structure of your for() loop is wrong too. You are declaring the UIColor before the loop begins. You should be declaring the color AFTER the loop begins:

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 doesn't use integer values, it uses float values. Try dividing your integer by 255 and then setting those as r, g, b.

Like:

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];


来源:https://stackoverflow.com/questions/18338352/nsmutablearray-containsobject-returns-true-but-it-shouldnt

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!