2011-07-11 14 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"); 
     } 
    } 
} 

forループのif文までは完全に動作するようになりました。それは単に実行されません。なぜどんなアイデア?私はこれが簡単な修正だと確信していますが、私の人生のためにこれを理解することはできません。

ご協力いただければ幸いです!

答えて

8

これは、NSStringの2つの異なるインスタンス間のポインタ比較を行うためです。文字列を比較する

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

両方のオブジェクトが文字列であることがわかっている場合は、より効率的であるため、 '-isEqualToString:'を使用する必要があります。 –

+0

ありがとう、ロブ! – koo

+0

明確にするために、同じテキストを含む2つの文字列オブジェクトを持つことができるという違いがあります。 '=='は、両側が同じオブジェクトであるかどうかを示します。それらが異なる(すなわち2つの)オブジェクトである場合、それらが何を含むか表現しているかにかかわらず、 '=='は偽と評価されます:それらは同じオブジェクトではありません。ある文字列オブジェクトに送信される 'isEqualToString:'メッセージは、同じオブジェクトであるか2つのオブジェクトであるかにかかわらず、同じテキストが他の文字列と同じかどうかを示します。 –

3

利用のNSStringの-isEqualToString:方法を -

代わりにこれを行います。 ==は文字列のアドレスを比較するだけです。

関連する問題