2016-07-21 7 views
0

私のアプリでは、別の日に単語をブックマークしています。並べ替えのオプション(最近の並べ替えや最初の古いものなど)があります。ブックマークされた日付に基づいて単語を並べ替えることができません。どうすればいいですか?ディスクリプタを使用することで、最初の2つのエントリだけがソートされるので、ソートはうまくいかない。私のコードは次のとおりです。目的地Cで日付をソートする方法は?

NSSortDescriptor *sortDescriptor1 = [[NSSortDescriptor alloc] initWithKey:@"cellType" ascending:NO selector:@selector(localizedCaseInsensitiveCompare:)]; 
NSSortDescriptor *sortDescriptor2 = [[NSSortDescriptor alloc] initWithKey:@"entrydate" ascending:NO selector:@selector(localizedCaseInsensitiveCompare:)]; 
NSArray *sortDescriptors = [NSArray arrayWithObjects:sortDescriptor1, sortDescriptor2, nil]; 

[self.favoriteEntries sortUsingDescriptors:sortDescriptors]; 

[[NSUserDefaults standardUserDefaults] setValue:@"descendingDate" forKey:@"BookmarkSortType"]; 
+0

の代わりにlocalizedCaseInsensitiveCompareを試してください@selector(compare :) – Saraswati

+0

'entrydate'は' NSString'か 'NSDate'ですか? – njuri

+0

あなたのデータによって異なります。 'localizedCaseInsensitiveCompare'は' NSString'にのみ適用されます。そのアプリを使用しているときにアプリがクラッシュしない場合、日付は文字列であり、使用する形式を知らなくても対応できません。 – Avi

答えて

-2

は次のように試してみてください:あなたはNSStringオブジェクトを持っているよう

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"MM/dd/yyyy HH:mm:ss a"];//SET_YOUR_DATE_FORMAT 
      NSString *updatedDateStr1 = YOUR_FIRST_DATE_STRING; 
      NSDate *date1 = [dateFormatter dateFromString:updatedDateStr1]; 
      NSString *updatedDateStr2 = YOUR_SECOND_DATE_STRING; 
      NSDate *date2 = [dateFormatter dateFromString:updatedDateStr2]; 
    NSComparisonResult result = [date2 compare:date1];//THIS WILL RETURN ONE OF NSOrderedAscending , NSOrderedSame, NSOrderedDescending 
+0

いいえ、正しいデータ型(この場合はNSDate)を使用してデータを格納します。比較するために常にNSStringをNSDateに変換することは非常に非効率的です。 – Droppy

-2

が見えます。 NSDateオブジェクトに変換し、必要に応じて述語とソートを使用して比較する必要があります。あなたの辞書や配列に何を持っていてもobjを修正してください。

NSDateFormatter *df = [[NSDateFormatter alloc]init]; 
[df setDateFormat:@"yyyy-MM-dd"];// Whatever your current stringDate format. 
[df setTimeZone:[NSTimeZone systemTimeZone]]; 
NSPredicate *findFutureDates = [NSPredicate predicateWithBlock: ^BOOL(id obj, NSDictionary *bind){ 
    NSDate *dd = [df dateFromString:(NSString *)obj ]; 
    return ([[NSDate date] compare:dd] == NSOrderedAscending); 
}]; 

NSArray *arrFutureDates = [yourArray filteredArrayUsingPredicate: findFutureDates]; 
NSLog(@"%@",arrFutureDates); 

おそらくこれが役立ちます。

0

バブルソートを使用することができます。混乱することなく正確な結果を得ることができます。コード行はあらかじめ定義された機能以上ですが、バブルソートを使用するのは正しいでしょう。

+1

これは組込みソートクラスにどのような利点がありますか? – Droppy

+0

さらに説明してください。あなたの答えはあまりにも曖昧です。なぜ他のソートオプションよりも優れているのですか? – Joshua

関連する問題