2012-06-30 35 views
0

我想在iPhone應用程序中通過Aa-Zz格式對NSMutablArray值進行排序。我在我的項目中使用了下面的代碼。如何在iPhone中對NSMutableArray的值Aa-Zz進行排序?

for (id key in [dictionary allKeys]) 
     { 
      id value = [dictionary valueForKey:key]; 
      [duplicateArray addObject:value]; 
      [value release]; 
      value =nil; 
      NSSortDescriptor *sortdis = [[[NSSortDescriptor alloc] initWithKey:@"Name" ascending:YES] autorelease]; 
      NSArray *discriptor = [NSArray arrayWithObjects:sortdis,nil]; 
      mutableArray = [[duplicateArray sortedArrayUsingDescriptors:discriptor]retain]; 
     } 
     NSLog(@"mutableArray : %@", mutableArray); 
[mutableArray sortUsingSelector:@selector(caseInsensitiveCompare:)]; 

的應用越來越墜毀與此錯誤日誌:[__NSArrayI sortUsingSelector:]: unrecognized selector sent to instance.

但是,我已經搜查,發現了墜毀的原因。我mutableArray值都是這樣的,

(
     { 
     Id = 00001; 
     Name = "ABCD"; 
    }, 
     { 
     Id = 00002; 
     Name = "BCDE"; 
    }, 
     { 
     Id = 00003; 
     Name = "ZXYS"; 
    }, 
     { 
     Id = 00004; 
     Name = "abcd"; 
    }, 
     { 
     Id = 00009; 
     Name = "bcde"; 
    }, 
) 

我想有點像ABCD,ABCD,BCDE,BCDE,ZXYs這個數組valuse。 任何人都可以請幫忙解決這個問題。

回答

1

Gopinath。請在您的項目中使用此更新的代碼。

for (id key in [dictionary allKeys]) 
    { 
     id value = [dictionary valueForKey:key]; 
     [duplicateArray addObject:value]; 
     [value release]; 
     value =nil; 
     NSSortDescriptor *sortdis = [[[NSSortDescriptor alloc] initWithKey:@"Name" ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)]autorelease]; 
     NSArray *discriptor = [NSArray arrayWithObjects:sortdis,nil]; 
     mutableArray = [[duplicateArray sortedArrayUsingDescriptors:discriptor]retain]; 
    } 
    NSLog(@"mutableArray : %@", mutableArray); 

我希望它能幫到你。謝謝。

+0

感謝。這對我有幫助。 – Gopinath

+0

這有幫助,但它不是很好的代碼。在添加完所有內容後,您只應該對數組進行一次排序!移動在循環外排序的所有代碼。而且價值不需要被釋放 - 你沒有創造它。所以失去了發行版。 –

0
for (id key in [dictionary allKeys]) 
    { 
     id value = [dictionary valueForKey:key]; 
     [duplicateArray addObject:value]; 
    } 
    NSSortDescriptor *sortdis = [[[NSSortDescriptor alloc] initWithKey:@"Name" ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)]autorelease]; 
    NSArray *discriptor = [NSArray arrayWithObjects:sortdis,nil]; 
    NSArray* notAMutableArray = [[duplicateArray sortedArrayUsingDescriptors:discriptor]retain]; 
    NSLog(@"notAMutableArray : %@", notAMutableArray); 

我沒有跑這一點,但它是一個更好的開始...

相關問題