如何从核心数据中获取数据并在表格视图中显示 iOS 6

Posted

技术标签:

【中文标题】如何从核心数据中获取数据并在表格视图中显示 iOS 6【英文标题】:How to fetch data from core data and display in table View iOS 6 【发布时间】:2013-09-01 10:59:58 【问题描述】:

我已成功将通讯录数据存储在 Core Data 中,但我无法检索它并将其显示在 tableView 中。我缺少什么?

这就是我从核心数据中获取数据的方式。

-(void)fetchFromDatabase

  AddressBookAppDelegate *appDelegate =[[UIApplication sharedApplication]delegate];
  NSManagedObjectContext *context = [appDelegate managedObjectContext];
  NSEntityDescription *entityDesc = [NSEntityDescription entityForName:@"AddressBook" inManagedObjectContext:context];
  NSFetchRequest *request = [[NSFetchRequest alloc] init];
  [request setEntity:entityDesc];

  NSError *error;
  self.arrayForTable = [context executeFetchRequest:request error:&error];
   NSLog(@"fetched data = %@",[self.arrayForTable lastObject]); //this shows the data
   [self.tableView reloadData];

这是我的表格视图配置。

 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

   return 1;


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

  return [self.arrayForTable count];



- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

   static NSString *CellIdentifier = @"Cell";

   UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
   if (cell == nil) 
   cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
   reuseIdentifier:CellIdentifier];

   if ([self.arrayForTable count]>0)
   
       NSLog(@" table view content  = %@",[self.arrayForTable lastObject]);// this doesn't log
       AddressBook *info = [self.arrayForTable objectAtIndex:indexPath.row];
       cell.textLabel.text = info.firstName;

    
    
  return cell;

【问题讨论】:

尝试在fetchFromDatabase 方法的末尾添加[self.tableView reloadData]。 - 您还应该考虑使用 NSFetchedResultsController 在表格视图中显示核心数据对象。 我更新了 [self.tableView reloadData];方法 。但结果是一样的。 是否调用了numberOfRowsInSectioncellForRowAtIndexPath numberOfRowsInSection 被调用,但 cellForRowAtIndexPath 没有被调用。 [self.arrayForTable count]numberOfRowsInSection 中的值是多少? 【参考方案1】:

正如讨论结果,self.arrayForTableviewWillAppear 中被替换为一个空数组获取fetchFromDatabase 中的对象之后。

另一个问题是程序的每次运行都会在数据库中创建新对象, 导致重复的对象。你可以

在插入新对象之前删除所有对象,或者 对于每个名称,检查数据库中是否已存在匹配对象,仅在必要时插入新对象。

“核心数据编程指南”中的"Implementing Find-or-Create Efficiently" 中描述了更高级的技术。

【讨论】:

以上是关于如何从核心数据中获取数据并在表格视图中显示 iOS 6的主要内容,如果未能解决你的问题,请参考以下文章

如何从转义闭包中获取值并将其分配给变量并在表格视图中显示

在 Swift 中删除表格视图的核心数据记录(行)

如何从按对象创建日期排序的核心数据中获取结果?

在 iOS7 中使用核心数据删除表格视图中的行的奇怪行为

Swift:从 Firebase 检索数据并在表格视图中显示

从核心数据中获取