EvernoteSDK でノートブックのリストを取得してみると、ノートブックの並びがバラバラ。
どうやら更新順に並んでいるようです。
アプリなどでノートブックのリストを表示させる場合、
ノートブック名で昇順に並んでいる必要があります。
しかも、スタックにまとめられている場合は、
スタック名がノートブック名に優先して並べられねばなりません。
この並び順を得るためのソートを行なってみました。
ポイントはソートキーをスタックとノートブック名の連結文字列にしたこと。
これによって、ソートを1回で済ませることができます。
まだ荒い部分はありますが、とりあえず並び順は公式クライアントと一致しているはず。
「これおかしい」とか、「ここもっとこう…」とかありましたら、
コメントでもTwitterでも連絡下さると嬉しいです。
// セッション EvernoteSession* sesssion = [EvernoteSession sharedSession]; // 認証トークン NSString* authToken = [session authenticationToken]; // ノートストア EDAMNoteStoreClient* nStore = [session noteStore]; // 配列にノートブックのリストを格納(この段階ではバラバラ) NSArray* notebooks = [[NSArray alloc] initWithArray:[nStore listNotebooks:authToken]]; // ソート用キーを格納するソート用配列 NSMutableArray* keys = [[NSMutableArray alloc] init]; // ソート用キーをキーにしてノートブックを格納するハッシュ配列 NSMutableDictionary* mdNotebooks = [[NSMutableDictionary alloc] init]; // ノートブックのリストからノートブックを1つずつ取り出し for ( EDAMNotebook* notebook in notebooks ) { // スタック NSString* stack = notebook.stack; // スタックが無ければ、空文字列を格納 if ( stack == nil ){ stack = @""; } // ソート用キーを生成(ここが肝!スタックとノートブック名を連結した文字列をキーにする NSString* sortKey = [[NSString alloc] initWithFormat:@"%@%@", stack, notebook.name]; // ソート用配列にソート用キーを格納 [keys addObject:sortKey]; // ソート用キーをキーにしてノートブックをハッシュ配列に格納 [mdNotebooks setObject:notebook forKey:sortKey]; } // ソート後のキーを格納するソート後キー配列 NSArray* sortedKeys = [[NSArray alloc] init]; // ソート用キーをソート sortedKeys = [(NSArray*)keys sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)]; // ソート後のノートブックを格納する配列 NSMutableArray* sortedNotebooks = [[NSMutableArray alloc] init]; // ソート後キー配列からキーを順次取り出し for ( NSString* key in sortedKeys ) { // ノートブックのハッシュ配列からキーを使ってノートブックを取り出し、ソート後ノートブック用配列に格納 [sortedNotebooks addObject:[mdNotebooks objectForKey:key]]; } // 中身確認。 for ( EDAMNotebook* notebook in sortedNotebooks ) { NSLog(@"%@", notebook.name); }