如何在 UITableView 中显示 Core Data 的数据

Posted

技术标签:

【中文标题】如何在 UITableView 中显示 Core Data 的数据【英文标题】:How to show the data of Core Data in a UITableView 【发布时间】:2014-09-16 07:01:14 【问题描述】:

我从 JSON 获取响应并使用 Core Data 存储该数据。我想始终在UITableView 中显示数据。你能建议我如何在UITableView 中显示数据吗?

这是我正在使用的代码。

    NSManagedObject * newEntry =[[NSManagedObject alloc]initWithEntity:entityDesc insertIntoManagedObjectContext:self.managedObjectContext];

    [newEntry setValue:[dict objectForKey:@"albumName"] forKey:@"albumName"];
    [newEntry setValue:[dict objectForKey:@"coverPhotoURL"] forKey:@"coverPhotoURL"];
    [newEntry setValue:[dict objectForKey:@"createdDate"] forKey:@"createdDate"];

    NSLog(@"Log %@", newEntry);

    NSError * error = nil;
    if ([self.managedObjectContext save:&error] == NO)
    
        NSLog(@"CANNOT SAVE: %@ %@", error, [error localizedDescription]);
    
    else 
        NSLog(@"SUCCES, go check the sqlite file");
    



NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];    
NSEntityDescription *entity = [NSEntityDescription entityForName:@"GetAlbums"
                                          inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];

NSError* error;    
NSArray *fetchedRecords = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];
NSLog(@"Fetch Records %@",fetchedRecords);

【问题讨论】:

你知道UITableViewControllers怎么用吗? 你知道tableView 您已经有了获取的记录数组,然后在表格视图中显示它们。 - 你的问题是关于如何从数组中提取元素? 我只写了这个 [self.tableView reloadData]; 这篇教程你看过了吗:appcoda.com/uitableview-tutorial-storyboard-xcode5 【参考方案1】:

即使按照walle84 的建议,您可以实现UITableViewDelegate 的方法在表格视图中显示数据,正确的方法是使用UITableViewNSFetchedResultsController。正如文档中所写,后者是使用的

有效地管理从 Core Data 获取请求返回的结果,以便为 UITableView 对象提供数据。

我把重点放在高效上,因为它提供了很多优点。例如,它允许延迟加载数据,它允许跟踪特定实体的更改(实现NSFetchedResultsControllerDelegate)等等。

从哪里开始?有很多啧啧。只需用谷歌搜索它们,您就会找到一个很好的起点。

Core Data From Scratch How To Use NSFetchedResultsController

【讨论】:

【参考方案2】:

您使用以下表格视图方法来显示您的数据。

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    return  [self.arrayOfyourData count];


-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
    return 1;


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

    static NSString *cellIdentifier = @"CellIdentifier";

    //you could use default cell or ur own custom cell.
    cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

    // Now here you could pare your self.arrayOfyourData to fetch and populate your cell.

    return cell;

【讨论】:

以上是关于如何在 UITableView 中显示 Core Data 的数据的主要内容,如果未能解决你的问题,请参考以下文章

如何根据 Core Data 中的关系对象创建 UITableView 部分

如何切换到将 Core Data 用于简单的 UITableView 而不是 NSArray?

Cocoa Touch 从 Core Data 更新 UITableView

Swift UITableView 删除行项 - tableview 数据源是 Core Data

使用 Core Data 时如何使用 Watch Connectivity 共享数据

如何在没有数组的 UITableView 中显示 UITableView Cell?