2014-08-29 97 views
0

我是開發應用程序的新手。我有一個NSArray中有2個圖像。NSArray和「If-statement」

imageOneArray = [NSArray arrayWithObjects:[UIImage imageNamed:@"White.png"], [UIImage imageNamed:@"Black.png"], nil]; 

我的問題是,有沒有一種方法,使一個「if語句」,看起來像這樣:

if ([imageOneArray = [UIImage imageNamed:@"White.png"]) { 
    //DO SOMETHING 
}; 

上面的代碼是給我的錯誤,我該如何解決?我究竟做錯了什麼?我做什麼工作?

任何幫助將不勝感激。

+0

我建議你保持圖像的名稱,如在陣列中,'@ @ 「White.png」,@ 「Black.png」,..]'和'[比較imageOneArray containsObject:@「White.png」]'和'isEqualToString:'方法可以很容易的進行元素比較。 – Akhilrajtr 2014-08-29 04:39:59

回答

5

如果您需要檢查數組是否包含一個對象,你應該用

if ([imageOneArray containsObject:[UIImage imageNamed:@"White.png"]]) { 
    //DO SOMETHING 
}; 

這裏去,你應該注意到,該陣列檢查遏制發送-isEqual:到它的對象。所以,在UIImage-isEqual:將只做指針比較。由於+imageNamed:提供的圖像緩存機制,上面的代碼將返回YES,但是,通常應該返回NO。考慮下面的例子:

NSString *path = [[NSBundle mainBundle] pathForResource:@"White" ofType:@"png"]; 
UIImage *image1 = [UIImage imageWithContentsOfFile:path]; 
UIImage *image2 = [UIImage imageWithContentsOfFile:path]; 
NSArray *arr = @[image1]; 
BOOL contains1 = [arr containsObject:image1]; // YES 
BOOL contains2 = [arr containsObject:image2]; // NO 

並考慮用繩子下面的例子:

NSString *string1 = [NSString stringWithString:@"abc"]; 
NSString *string2 = [NSString stringWithString:@"abc"]; 
NSArray *arr = @[string1]; 
BOOL contains1 = [arr containsObject:string1]; // YES 
BOOL contains2 = [arr containsObject:string2]; // YES 

所以,你應該記住的平等規則的數組中的對象。在NSHipster上有關於此主題Equality的精彩文章。

如果您需要檢查陣列是否等於到另一個陣列去

if ([imageOneArray isEqualToArray:@[[UIImage imageNamed:@"White.png"]]]) { 
    //DO SOMETHING 
}; 

NSArray class reference看看看的時候,你可以用數組

+0

謝謝你的信息。現在,爲什麼當我使用containsObject時會給我一個錯誤?錯誤說:「'NSArray'沒有可見的@interface'聲明選擇器'containsObject'」 – 2014-08-29 04:46:19

+0

你錯過了冒號可能...上面的代碼編譯就好了 – 2014-08-29 04:48:40

+0

是的,我做到了。非常感謝你 – 2014-08-29 04:55:03

4

假設目標是檢查數組是否包含名爲「White」的圖像,您可以嘗試以下操作。請注意,UIImage的-imageNamed:不需要擴展

if ([imageOneArray containsObject:[UIImage imageNamed:@"White"]]) { 
    //DO SOMETHING 
} 
2

您駕駛室使用containObject在做數組 -containsObject:使用-isEqual:比較對象,這通常是您想要的:例如,包含相同UNICODE字符的兩個NSString對象將被視爲相等,即使它們不是相同的對象。

3

你在代碼中遇到了一些問題。

首先"="是一種轉讓,例如,

myName = Joe

而 「==」 是比較

1 == 1 (true) 1 == 2 (false)

其次,數組包含多個對象,所以你必須要經歷和比較每一個(或使用其他答案包含的containsObject方法)。你經常會用For循環來做到這一點。

UIImage* myImageToCompare = [UIImage imageNamed:@"White"]; 

for (int i=0; i<imageOneArray.count; i++) { 
if ([imageOneArray objectAtIndex:i] == myImage){ 
...do something 
} 
} 
1
- (void)doStuff{ 
    UIImage * const targetImage = [UIImage imageNamed:@"White"]; 
    for (UIImage *currentImage in someArray /*replace someArray with your own*/) { 
     if ([self image:targetImage isEqualTo:currentImage]) { 
      // Do stuff 
      break; 
     } 
    } 
} 

- (BOOL)image:(UIImage * const)firstImage isEqualTo:(UIImage * const)secondImage { 
    NSData * const firstData = UIImagePNGRepresentation(firstImage); 
    NSData * const secondData = UIImagePNGRepresentation(secondImage); 
    return [data1 isEqual:data2]; 
}