2017-06-02 51 views
0

我想排序一個可變數組類型的屬性。 但是我只設法對NSString數組進行排序。Objective-C,按字母順序排序NSMultable類型的類數組?

NSMutableArray<DBFILESFileMetadata*> *tmpArray = [[NSMutableArray alloc]init]; 

for (DBFILESMetadata *entry in entries) 
{ 
    //conditions 
    [tmpArray addObject:fileMetadata]; 
} 

這裏的類型/類

https://github.com/dropbox/dropbox-sdk-obj-c/blob/4c99bdf726cf9724adfddc19e71a87a6012eddeb/Source/ObjectiveDropboxOfficial/Shared/Generated/ApiObjects/Files/Headers/DBFILESMetadata.h

我已經試過

[yourArray sortUsingSelector:@selector(localizedCaseInsensitiveCompare:)]; 

NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES]; 
[yourArray sortUsingDescriptors:[NSArray arrayWithObject:sort]]; 

的屬性稱爲名稱。

我見過這樣的回答,像這樣How can I sort an NSMutableArray alphabetically?但我似乎無法得到這個工作爲我的情況。

回答

2

爲了使用sortUsingSelector進行排序,您需要在您嘗試比較的對象中實現比較方法。 (所以你的DBFILESMetadata類將需要一個比較方法 - localizedCaseInsensitiveCompare在上面的代碼。)

你應該也可以使用排序描述符,如你在第二次嘗試中顯示。當你這樣做會發生什麼?

第三種方法是使用NSMutableArraysortUsingComparator並編寫一個比較這兩個對象的NSComparator塊。

我出與Objective-C的但快速谷歌搜索的實踐中發現的例子,這是我適應您的具體問題:

[entries sortUsingComparator: 
    ^NSComparisonResult(DBFILESMetadata *obj1, DBFILESMetadata *obj2) 
    { 
    return [obj1.name localizedCaseInsensitiveCompare: obj2.name]; 
    }]; 

這應該工作,雖然我說我走了在Objective-C中的實踐中,它的塊語法是非常尷尬和反直覺的。

+0

請參閱編輯我的答案。我在我的評論中清理了一個類型,並且更改了我提供的用於在代碼中使用'localizedCaseInsensitiveCompare'對對象進行排序的代碼。 –