我已經在我的組合框數據源數組中包含了一個佔位符[NSNull null],所以我可以允許用戶在沒有實際存儲空白對象的情況下選擇「none」。的問題是,當一個真正的對象被添加到數據源陣列,我需要對數組進行排序:如何對包含NSNull實例的NSMutableArray進行排序
[self.mutableArrayOfStrings sortUsingSelector:@selector(caseInsensitiveCompare:)];
這條線產生SIGKILL。
我有與NSManagedObject的同伴陣列,其中也有一個佔位符NSNull同樣的問題:
NSSortDescriptor *sortDescriptorName = [[NSSortDescriptor alloc] initWithKey:@「name」 ascending:YES selector:@selector(caseInsensitiveCompare:)];
NSArray *sortDescriptorsNames = [[NSArray alloc] initWithObjects: sortDescriptorName, nil];
[self.mutableArrayOfMOs sortUsingDescriptors:sortDescriptorsNames];
如果mutableArrayOfMOs包含NSNull對象,此行也產生了SIGKILL。當然,我可以將非空對象複製到一個單獨的數組中,對其進行排序,重新插入空對象,並將其分配給數組屬性 - 但這會混亂我的代碼。不應該有排序的方式,不要嗆NSNull?畢竟,Apple已經明確提供了NSNull來允許我們將它包含在數組中。
甚至更好的是,你可以使用`sortUsingComparator:`進行排序,它需要一個`NSComparator`塊,並且可以節省在代碼中間添加不適當的功能。 – 2010-12-23 17:51:53