2011-07-11 60 views
1

我對客觀的c和可可很新,但是我花了很多時間在C++上,而且我從來沒有遇到過這個問題。如果沒有運行語句

我的應用程序需要通過名稱來識別安裝的磁盤。這裏是代碼:

//this code will run whenever a new disk is mounted to the computer 
-(void) scanForKindle:(NSNotification *) notification 
{ 
    NSMutableArray *mountedDisks = [[NSMutableArray alloc] init]; 
    mountedDisks = [workspace mountedRemovableMedia]; 
    NSMutableArray *ebookDevices = [[NSMutableArray alloc] init]; 
    NSDictionary *fileAttributes = [[NSDictionary alloc] init]; 

    int currentDisk; 

    for (currentDisk = 0; currentDisk < [mountedDisks count]; currentDisk++) 
    { 
     NSLog(@"Name: %@", [mountedDisks objectAtIndex:currentDisk]); 

     if ([mountedDisks objectAtIndex:currentDisk] == @"/Volumes/Kindle") 
     { 
      NSLog(@"Kindle has been identified"); 
     } 
    } 
} 

我已經得到了一切工作完美的if語句在for循環。它不會運行。任何想法爲什麼?我相信這是一個簡單的解決方法,但我無法弄清楚這一點爲我的生活。

任何幫助將不勝感激!

回答

8

這是因爲您正在指示比較NSString s的兩個不同實例。

做到這一點,而不是 -

if ([[mountedDisks objectAtIndex:currentDisk] isEqualToString:@"/Volumes/Kindle"]) 
{ 
    NSLog(@"Kindle has been identified"); 
} 
+1

如果你知道這兩個對象都是字符串,你應該使用'-isEqualToString:',因爲它更高效。 –

+0

謝謝,羅布! – koo

+0

澄清它的區別在於,您可以有兩個包含相同文本的字符串對象。 '=='告訴你雙方是否是同一個對象;如果它們是不同的(即兩個)對象,那麼無論它們包含或表示什麼,'=='都將評估爲false:它們不是同一個對象。發送給一個字符串對象的'isEqualToString:'消息將告訴你它是否包含與另一個字符串相同的文本,而不管它們是相同的對象還是兩個對象。 –

3

使用NSString的-isEqualToString:方法比較字符串。 ==只是比較字符串的地址。