2012-06-13 32 views
0

我從堆棧溢出的答案中找到這些代碼片段,既不優雅地解決我的問題。有什麼正確的方法來字母化一個NSMutableArray?

來自"Sorting array in alphabetic order…"的第一段代碼沒有給出任何警告,但之後是崩潰。

NSSortDescriptor *nameSort = [NSSortDescriptor sortDescriptorWithKey:@"Name" ascending:YES]; 
[myArray sortUsingDescriptors:[NSArray arrayWithObject:nameSort]]; 

雖然代碼的第二部分產生每在我的代碼使用一個警告,但產生的結果我想:

myMutableArray = [myMutableArray sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)]; 

所以,我的問題是,爲什麼與警告確實第二種方法的工作, 「Incompatible pointer types assigning to 'NSMutableArray*' from incompatible type 'NSArray*'」?

+3

文檔是你的朋友! [sortedArrayUsingSelector:](https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSArray_Class/NSArray.html#//apple_ref/doc/uid/20000137-BABBHAGJ)vs. [ sortUsingSelector:](https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSMutableArray_Class/Reference/Reference.html#//apple_ref/doc/uid/20000138-BABCBFFC) – MechEthan

+0

I嘗試從'sortUsingSelector:'分配,而不是將其視爲一種方法,多麼尷尬。 xD – erran

回答

2

如果你正在嘗試做一個NSMutableArray的就地排序,你應該使用sortUsingSelector:而不是重新指定sortedArrayUsingSelector:(它被聲明爲普通的NSArray,而不是NSMutableArray)的結果。

+0

謝謝,我偏離使用這個當我以前試過,因爲我曾嘗試過:'myMutableArray = [myMutableArray sortUsingSelector:@selector(caseInsensitiveCompare :)];'而不是使用實際的'sortUsingSelector'方法。 – erran

相關問題