私は5つのスクリーンを持っています。各画面には、ユーザーが選択したオプション、つまり時刻と日付のピッカー、およびユーザーが入力するいくつかの UIFields があります。そのため、1 つのエンティティを作成し、すべての属性 (25) を追加しました。LM という NSObjectSubClass を作成しました
各シーンで、次のことを行っています。
@property (nonatomic, strong) LM *lMData;
NSString *date = [[NSString alloc] initWithFormat:@"%@", [dateFormatter stringFromDate:selectedDate]];
DateLabel.text = date;
self.lMData.dateLabel = date;
self.lmData.nameField5 = UITextFieldName5.text;
User Segue が次の画面に移動する前に、次のことを行います。
NSError *error;
NSManagedObjectContext *context = self.managedObjectContext;
if (![context save:&error])
{
NSLog(@"There was an error in Save:%@",error);
}
フェッチするには、カスタムの UITableViewController でデータを表示するだけです。これには 12 のセクションがあり、各セクションに 2 つのセルが表示されます。並べ替えは特に必要ありません。セルが正しいセクションに表示されるようにしたいだけです。
取得するには、次の方法があります。
-(NSFetchedResultsController *) fetchResultsController
{
if (_fetchResultsController !=nil)
{
return _fetchResultsController;
}
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"LM"
inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"startTimeLabel" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
_fetchResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:nil];
return _fetchResultsController;
}
私が読んだことから、フェッチするにはソートする必要があるようです。つまり、次の行です。
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"startTimeLabel"
私のエンティティには「startTimeLabel」という属性があります。しかし、私はソートを余儀なくされているので、そこに持っています。しかし、私は本当にソートする必要はありません。
この時点では何も表示されていません。
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return [[self.fetchResultsController sections] count]; //I need 10 sections here;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
id<NSFetchedResultsSectionInfo> secInfo = [[self.fetchResultsController sections]objectAtIndex:section];
return [secInfo numberOfObjects]; //I need 2 rows in each section here
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
LM *letsMeetData = [self.fetchResultsController objectAtIndexPath:indexPath];
cell.textLabel.text = letsMeetData.dateLabel;
return cell;
}
質問:
保存して取得するコードは正しいですか?
ソートを取り除くにはどうすればよいですか? ソートする必要はありません。
取得したデータを UITableView に表示するコードが間違っていることはわかっています。お知らせ下さい。
最後に、これらの各フォームをオブジェクトとして保存して、ユーザーが後でそれらを取得できるようにする必要もあります。LM オブジェクトを格納するために別のエンティティを作成する必要がありますか?
ありがとう