0

私はiPhoneアプリを作成していますが、frcコントローラーを使用してCore Dataからデータを取得するテーブルビューがあり、タイトルで並べ替えられたものが表示されます。ユーザーが次の画面に移動した場合、frcのソート記述子を変更する必要がある3つのボタンのいずれかをクリックできます。次の画面でそのfrcを呼び出し、ユーザーが押したボタンに基づいてソート記述子を変更するにはどうすればよいですか?

- (IBAction)btnValue:(id)sender {

}


- (NSFetchedResultsController *)frc_Work

{

// If the frc is already configured, simply return it

if (_frc_Work) return _frc_gradedWork;



// Otherwise, create a new frc, and set it as the property (and return it below)

_frc_Work = [_cdStack frcWithEntityNamed:@"GradedWork" withPredicateFormat:nil predicateObject:nil sortDescriptors:@"title,YES" andSectionNameKeyPath:nil];



return _frc_Work;

}

4

1 に答える 1

1

次の画面のボタンが押されるたびに、デリゲートまたは通知を使用して画面間の通信を行います。

通知時に、ソート記述子をプロパティとして保持します。通知を受け取ったときに変更し、viewWillAppearで値をチェックしてページをリロードするダーティフラグ変数を設定します。

詳細な説明:

2つの画面があります(2つのView Controllerを想定しています)

最初の画面には、特定の基準に基づいてソートされたデータが表示されます。コアデータのクエリ中に、このNSSortdescriptorをリクエストに渡して、適切なデータをフェッチする必要があります。

この画面にはNSSortDescriptotプロパティがあります。

2番目の画面には3つのボタンが表示され、それらに共通のIBActionがあります。押されたボタンに基づいて、SortingCriteriaChanged:(NSSortDescriptor * sortDescriptor)などのデリゲートメソッドを呼び出し、適切なソート記述子を作成してこのデリゲートメソッドに渡します。この2番目の画面を押す前に、最初の画面をこの画面への委任として設定し、上記の方法も実装します。

デリゲートメソッドで、sortDescriptorをデリゲートメソッドに渡されたものに設定します。

今は何もリロードしないでください。

前の画面に戻ると、viewWillAppearが呼び出されます。ここでは、並べ替え条件が変更された場合にのみ、並べ替えられたリストを再読み込みする必要があります。

このためには、BOOLプロパティが必要です:needToReload。デリゲートメソッドでYESに設定し、viewWillAppearでその値を確認して、リストをリロードします。リストのリロードが完了したら、BOOLプロパティをNOに再度設定します。

于 2012-12-01T18:11:28.503 に答える