我有 5 个屏幕。每个屏幕都有用户选择的选项,即通过时间和日期选择器,以及用户将输入的一些 UIFields。所以我创建了一个实体并添加了所有属性 (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;
在用户转到下一个屏幕之前,我有:
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 对象?
谢谢