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) ...

仅当 obj1 和 obj2 指向相同的地址时,“if”才会返回 true,因此它们是完全相同的对象。但是如果您检查的目的是要知道两个日期是否相同,那么您应该使用 NSDate 特定的比较方法:


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

相反,如果对象是字符串,则应使用“isEqualToString:”方法。

于 2012-07-17T06:49:59.783 回答