この質問をするのは私が初めてではないことはわかっていますが、本当に困惑しています..
基本的に、2 つのボタンがある画面があります。各ボタンは、日付に基づいて下のテーブルビューにデータをロードします。最初のテーブルビューの最初のロード (デフォルトでは左ボタンが選択されています) では、すべて正常に表示されます。右のボタンをクリックすると、空のテーブルビューが表示され、エラーが発生します
インデックス x でフェッチされたオブジェクトには、順不同のセクション名 'xxxxxx. オブジェクトはセクション名でソートする必要があります。
左のテーブル ビューに戻ると、データが表示されていません。両方のテーブルビューが空です。
各テーブルビューには、アイテムの開始時間に応じて 2 つのセクションがあります。セクションを削除すると、データは正常に表示されます。残念ながら、私はそれらが必要です..データは次のように2つのセクションに分類されます:
@interface NSString(agendaSessionKeyPath)
@property (nonatomic, readonly) NSString *sessionSection;
@end
@implementation NSString(agendaSessionKeyPath)
- (NSString *)sessionSection
{
int timeValue = [[self stringByReplacingOccurrencesOfString:@":" withString:@""] intValue]; //turns 11:00 to 1100
if (timeValue < 1200)
return @"Morning";
else
return @"Afternoon";
}
取得リクエスト
- (void)viewDidLoad
{
//other viewDidLoad stuff
[self fetchSessions];
}
日付に基づいて左右のボタンからデータを並べ替えるメソッド:
- (void)fetchSessions
{
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
NSDate* date = nil;
if (selected == 0) //left button is selected
{
date = [dateFormatter dateFromString:@"2012-09-26"];
}
else if (selected == 1) //right button is selected
{
date = [dateFormatter dateFromString:@"2012-09-27"];
}
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"date == %@", date];
[self.fetchedResultsController.fetchRequest setPredicate:predicate];
NSError *error;
if (![[self fetchedResultsController] performFetch:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
}
}
フェッチされた結果のコントローラー
- (NSFetchedResultsController *)fetchedResultsController {
self.managedObjectContext = [[MATCDatabaseController sharedDatabaseController] managedObjectContext];
if (_fetchedResultsController != nil) {
return _fetchedResultsController;
}
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Session"];
NSSortDescriptor *sort = [[NSSortDescriptor alloc]
initWithKey:@"title" ascending:YES];
NSSortDescriptor *timeSort = [NSSortDescriptor sortDescriptorWithKey:@"timeValue" ascending:YES];
[fetchRequest setSortDescriptors:@[timeSort, sort]];
[fetchRequest setFetchBatchSize:20];
NSFetchedResultsController *theFetchedResultsController =
[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"startTime.sessionSection"
cacheName:nil];
self.fetchedResultsController = theFetchedResultsController;
[self.fetchedResultsController setDelegate:self];
return _fetchedResultsController;
}
どんな助けでも大歓迎です!