-1

我有5个屏幕。每个屏幕都有用户选择的选项,即通过时间&日期选择器和用户将键入的一些UIFields。因此,我创建了一个实体并添加了所有属性(25)。我创建了一个NSObjectSubClass名为LM核心数据:取

在每个场景我做了以下内容:

@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; 

之前用户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; 
} 

问题:

  1. 是我的代码保存和获取正确的吗?

  2. 我能做些什么来摆脱排序?我不需要排序。

  3. 我知道我的代码显示在UITableView中提取的数据是错误的。请指教。

  4. 最后,我还需要将这些表单中的每一个保存为对象,以便用户稍后可以将它们拉出。我是否需要创建另一个实体来存储LM对象?

感谢

回答

0

嘿与coredata工作,你需要创建一个NSManagedObject实体类。

(1)您可以使用实体类保存和检索数据。

LM_Entity *lm = [NSEntityDescription insertNewObjectForEntityForName:@"LM_Entity" inManagedObjectContext:self.managedObjectContext]; 
//Your code 
lm.nameField5 = UITextFieldName5.text; 
//Now save 
[self.managedObjectContext save:&error]; 

在检索使用

NSEntityDescription *entity = [NSEntityDescription entityForName:@"LM_Entity" 
             inManagedObjectContext:self.managedObjectContext]; 
[fetchRequest setEntity:entity]; 

(2)您需要NSFetchedResultsController工作时,以指定排序描述符。

(3)你的代码是用于显示所取得的数据

(4)是的,你需要创建一个实体类来保存和检索数据。(参见图1)正确。

请关注此tutorial了解有关coredata的更多信息。

+0

谢谢你的解释。我必须做[self.managedObjectContext保存:&错误];每个UITextField后?如果一个场景有5个UITextfields,我可以只做一次吗? – user1107173 2013-02-11 16:06:53

+0

是的,你必须首先分配所有的UITextField值到LM_Entity的变量,最后你可以调用[self.managedObjectContext save:&error]; **一旦**。 – 2013-02-13 04:29:01