2013-08-20 25 views
5

olmalıdır Benzer sorular, ancak -containsObject beklediğim gibi çalışmıyor.NSMutableArray includesObject true döndürür, ancak

Sorunum, NSMutableArray -containsObject yönteminin, rastgele bir UNIQUE renk oluşturmaya çalışırken ve bir diziye eklerken, yapmamasına rağmen doğru döndürmesidir.

NSMutableArray'un aynı değerlere sahip bir nesne içerip içermediğini kontrol etmenin en iyi yolu nedir?

sizin for() döngü yapısı çok yanlıştır:

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() her zaman söylediği dizi sayısı 1.

+1

Eğer adım adım 't' ve 'colour_arr' içeriğine bakmak hata ayıklama mı? – Wain

+0

(UIColor *) t gerektiği gibi farklı adres ve rgb değerleri alır. ama içerirObject, "Ben zaten aldım" diyor. sadece kopyala yapıştır kodu. ve günlüğe kaydetme sayısı 1 –

+3

UIColor, şamandıraları (CGFloats değerini kesin olarak) RGB değerleri olarak alır - 0 ile 1 arasında. RGB değerlerini doyurarak muhtemelen uzun bir dizi benzer nesne oluşturmuş olabilirsiniz. – Monolo

cevap

4

Yeni Düzenleme olduğunu. Döngü başlamadan önce UIColor'u bildiriyorsunuz. döngü başlar SONRA Rengini ilan edilmelidir: integer değerleri kullanmaz

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, bu float değerleri kullanır. integer'u 255'e bölmeyi ve sonra bunları r, g, b olarak ayarlamayı deneyin.

gibi:

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

Muhtemelen istersiniz alfa değerini de 1.0 olarak ayarlayın. – Monolo

İlgili konular