2011-06-28 20 views
0

私のアプリではUITableViewがあり、ナビゲーションコントローラには新しい項目を追加するボタンがあります。これは、アイテムの追加画面に移動し、終了したら、カスタムのデリゲートを使用して、詳細viewControllerの情報をメインのtableViewControllerに渡します。今私は代理人からの情報を持っている、私は3つの情報を取るとNSArray私のメインの配列に入れます。今、私の質問は、どのように詳細アイテムを日付順に並べ替えることができるかということです。私は3回失敗した(失敗した)と私はそれを把握するように見えることはできません。配列と辞書は入れ子になっているので混乱します。どんな助けでも大歓迎です。日付でUITableViewの項目を並べ替え

tableViewControllerクラスのデリゲートメソッド:

-(void)finishedAddingFoodItemFromDetail:(NSDate *)date whatWasEaten:(NSString *)whatFood whichMeal:(NSString *)meal{ 

NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"MMMM d, yyyy"]; 
NSString *dateString = [[NSMutableString alloc] init]; 
dateString = [dateFormatter stringFromDate:date]; 

if (!self.theArray) { 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    if ([defaults objectForKey:@"theArray"]) { 
     self.theArray = [defaults objectForKey:@"theArray"]; 
    } 
    else{ 
     self.theArray = [[NSMutableArray alloc] init]; 
    } 
} 
[self.theArray addObject:[NSArray arrayWithObjects:dateString, meal, whatFood, nil]]; 
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
[defaults setObject:self.theArray forKey:@"theArray"]; 

[self.tableView reloadData]; 
[self dismissModalViewControllerAnimated:YES]; 
} 

これは私が考えていたファイルhigharchyですが、私はそれを実装するように見えることはできません。

/* file higharchy 
* - theBigDict  //large dictionary holding everything 
*  - MutableArray by day stored as objects of theBigDict 
*  - Array of the meals info: 
*   - Meal type 
*   - Food 
*/ 

答えて

0

あなたは、その内容をソートするために呼び出すことができますNSMutableArrayにいくつかの方法があります。

 
– sortUsingDescriptors: 
– sortUsingComparator: 
– sortWithOptions:usingComparator: 
– sortUsingFunction:context: 
– sortUsingSelector: 

あなたは、複雑なオブジェクトの配列を持っているので、あなたがあなた自身の機能やコンパレータを書いて呼び出す必要があります適切なsortUsingXxx:メソッド。配列をNSUserDefaultsに格納する前に、テーブル上のreloadData:を呼び出す前に、これを行います。

これは役に立ちますか?

編集:カスタム関数またはコンパレータは、比較対象の2つの配列要素(日付を関数に渡します)から日付を引き出​​し、適切な比較結果を返す必要があります。 NSOrderedAscendingなど

+0

それは助けてくれましたが、編集の種類は私を混乱させました – Andrew

+1

ああ、申し訳ありません。あなたの機能が何をしていたのかを明確にするために追加情報を追加しました。あなたの配列が単純にNSNumbersの配列だった場合、デフォルトのコンパレータを使って配列をソートできます。 (SDKはNSNumberを比較する方法を知っています)。しかし、配列の要素は複雑なので、各配列要素(コンパレータに渡される)からデータを取り出して(日付)並べ替えて比較するコンパレータ関数を記述する必要があります適切なNSOrderedXxx結果。理にかなっている? –

+0

しかし、私は毎日別のセクションの見出し(日付 - 申し訳ありませんが私はそれについて前に明確ではなかった)の下に置くしたい。配列がソートされたら、どうすればいいですか – Andrew

関連する問題