如何从核心数据中获取数据并在表格视图中显示 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];方法 。但结果是一样的。
是否调用了numberOfRowsInSection
和cellForRowAtIndexPath
?
numberOfRowsInSection 被调用,但 cellForRowAtIndexPath 没有被调用。
[self.arrayForTable count]
在numberOfRowsInSection
中的值是多少?
【参考方案1】:
正如讨论结果,self.arrayForTable
在viewWillAppear
中被替换为一个空数组在获取fetchFromDatabase
中的对象之后。
另一个问题是程序的每次运行都会在数据库中创建新对象, 导致重复的对象。你可以
在插入新对象之前删除所有对象,或者 对于每个名称,检查数据库中是否已存在匹配对象,仅在必要时插入新对象。“核心数据编程指南”中的"Implementing Find-or-Create Efficiently" 中描述了更高级的技术。
【讨论】:
以上是关于如何从核心数据中获取数据并在表格视图中显示 iOS 6的主要内容,如果未能解决你的问题,请参考以下文章