2

2 つの配列インデックスを比較したいのですが、

for (int i=0; i<[CustomeDateArray count]; i++)
  {
      if (([CustomeDateArray objectAtIndex:1] == [newDateArray objectAtIndex:1]) && ([CustomeDateArray objectAtIndex:2] == [newDateArray objectAtIndex:2]))          
                {
                    exists=TRUE;
                    NSLog(@"exists=TRUE");
                }
  }

私のログには、次の結果が表示されます。

 CustomeDateArray at Index1=06
 CustomeDateArray at Index2=2012
        
 newDateArray at Index1=06
 newDateArray at Index2=2012

私のif条件が真の場合、コントロールは内部に入り、印刷されるはずexists=TRUE ですが、コントロールが内部に入っていないことがわかりexists=TRUEません。

どうしたの?

4

2 に答える 2

3
for (int i=0; i<[CustomeDateArray count]; i++)
  {
          if (([[CustomeDateArray objectAtIndex:1] isEqual:[newDateArray objectAtIndex:1]]) && ([[CustomeDateArray objectAtIndex:2] isEqual:[newDateArray objectAtIndex:2]]))        
                {
                    exists=TRUE;
                    NSLog(@"exists=TRUE");
                }
  }
于 2012-07-17T06:46:08.463 に答える
1

さて、私はあなたのコードにある種の問題があると思います:

  1. CustomDateArray (for ループ) 内でループしていて、インデックス "i" を使用していないのはなぜですか? (これは特定の質問とは関係ありませんが、コードのタイプミスをチェックしてください!)

  2. あなたの質問により具体的に: NSArray にはオブジェクトが含まれており、Obj-C のオブジェクトはポインターであるため、「==」はポインターを比較するだけです。この意味は:

if([CustomDateArray objectAtIndex:1]==[CustomDateArray objectAtIndex:2]) ...

に対応:

id obj1 = [CustomDateArray objectAtIndex:1];
id obj2 = [CustomDateArray objectAtIndex:2];
if(obj1==obj2) ...

「if」は、obj1 と obj2 が同じアドレスを指している場合にのみ true を返すため、それらはまったく同じオブジェクトです。ただし、チェックの目的が 2 つの日付が同じ日付であるかどうかを確認することである場合は、NSDate 固有の比較メソッドを使用する必要があります。


NSDate *d1 = [CustomDateArray objectAtIndex:1];
NSDate *d2 = [CustomDateArray objectAtIndex:2];
if([d1 isEqualToDate:d2]) ...

代わりに、オブジェクトが文字列の場合は、"isEqualToString:" メソッドを使用する必要があります。

于 2012-07-17T06:49:59.783 に答える