2013-06-21 67 views
-1

我試圖從NSMutableDictionary中創建一個密鑰數組,然後按字母順序對其進行排序。我現在得到的是:iOS - allKeys究竟是什麼:在NSArray中返回,以及如何字母化?

_currentItemsArray = (NSMutableArray *)[_currentItemsDict allKeys]; 
[_currentItemsArray sortUsingSelector:@selector(caseInsensitiveCompare:)]; 

但它拋出一個異常。具體做法是:

-[__NSArrayI sortUsingSelector:]: unrecognized selector sent to instance 0x1e54ddb0 

我的研究告訴我,這意味着_currentItemsArray值不NSString的。但是,當源NSMutableDictionary的密鑰是NSString的密鑰時,它們還會是什麼?

無論如何,這是按字母順序排列allKeys數組的最佳方法嗎?

+2

你不能只將東西投到另一個類,並期望它神奇地轉換。沒有一種編程語言就是這樣的。 – borrrden

+0

@SrikarAppal閱讀代碼,這不是問題。 – 2013-06-21 08:40:29

回答

1

一個並不簡單地投下一個NSArray指針NSMutableArray裏的指針。您的currentItemsArray可能是一個NSMutableArray,但沒有任何數量的(NSMutableArray *)強制轉換可以使NSArray變爲可變。你將不得不使用的NSArray方法:

NSArray *array = [[_currentItemsDict allKeys] sortedArrayUsingSelector:@selector(whatever)]; 
+0

謝謝!併爲Boromir參考提供讚揚。 – Nerrolken

+0

順便說一下,我完全相信你所說的是真實的,但是你能否爲我澄清一些事情:我試圖這樣做的原因是因爲我得到了「從NSArray分配NSMutableArray」的警告,但是當我把「 NSMutableArray *)'只是在雲雀面前投射,警告消失了。這是一個XCode問題,而不是足夠聰明地認識到我正在嘗試一些不可能的事情?或者還有其他一些原因會導致警告消失嗎?我只是問,所以我可以避免在未來做類似的毫無意義的事情...... – Nerrolken

+0

你只需要更多的關注。如果AB是A的子類,那麼所有AB都可以看作A,但並不是所有的A都可以看作AB。 – Kreiri

1

NSArray的正確方法是sortedArrayUsingSelector:

NSArray *sortedKeys = [_currentItemsArray sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)]; 
+0

這樣做,謝謝! – Nerrolken

1
NSArray *sortedKeys = [[dict allKeys] sortedArrayUsingSelector: @selector(caseInsensitiveCompare:)]; 

NSLog("%@", sortedKeys); 
1

-[NSMutableDictionary allKeys]返回NSArray。項目的順序不是預先確定的,但通常是按字母順序排列的。無論如何,由於返回值爲NSArray,因此此方法僅適用於NSMutableArrays,因此不能使用-sortUsingSelector。您應該使用另一種方法,如-[NSArray sortedArrayUsingSelector:]