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

时间:2013-09-01 10:59:58

标签: ios uitableview core-data

我已成功将地址簿数据存储在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;
}

1 个答案:

答案 0 :(得分:0)

正如在讨论中发现的那样,在self.arrayForTable中获取对象之后,viewWillAppear 中的空数组已替换为fetchFromDatabase

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

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

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