2012-07-17 78 views
2

我是新來的iPhone JIANGSU作者:孫軍,比較兩個NSMutableArray的指數在iPhone

我想比較兩個數組下標,

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控制不進去。

有什麼問題?

任何幫助將不勝感激。

+0

所以,'TRUE'與Objective-C中的YES相同,'FALSE'與'NO'相同,但您應該習慣使用'YES'和'NO'。所有Apple的示例代碼都使用它們,我在互聯網上見過的大部分代碼也是如此。 – 2012-07-17 06:55:38

回答

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"); 
       } 
    } 

這可以幫助你 編碼快樂:-)

+1

您可能想要使用'isEqual:'而不是'isEqualToString:',但這完全是比較Objective-C對象的正確方法。 – 2012-07-17 06:48:30

+1

+1但只有一個觀察:如果數組中的項不是'NSString's,則可能需要使用'isEqual'而不是'isEqualToString'。 – idz 2012-07-17 06:49:20

+0

好吧,isEqual比isEqualString更好嗎? – 2012-07-17 06:50:00

1

好了,我看到那種代碼中的問題:

  1. 爲什麼你在裏面CustomDateArray循環(對於循環),你沒有使用索引「我」? (這與特定問題無關,但只需檢查您的代碼是否有錯字!)

  2. 更具體到您的問題:NSArray包含Obj-C中的對象和對象是指針,所以您的「==」只是比較指針。這意味着:

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

對應於:

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

「如果」將返回true只有OBJ1和OBJ2指向同一個地址,所以他們是完全一樣的對象。但是,如果你檢查的目的是要知道,如果兩個日期是相同的日期,那麼你應該使用NSDate的具體比較方法:


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

相反,如果對象是字符串,你應該使用「isEqualToString :「 方法。