IOS/Objective-C:无法显示核心数据信息

Posted

技术标签:

【中文标题】IOS/Objective-C:无法显示核心数据信息【英文标题】:IOS/Objective-C: can't display core data information 【发布时间】:2017-02-10 21:39:44 【问题描述】:

我的应用遵循 web(json)->appDelegate (Core Data)->ViewController 的方案。到目前为止,我可以看到从序列化 json 获得的位置以及我输入用于测试的所有其他新位置。但现在我试图在表格视图中显示它们,但到目前为止它不起作用。尽管我知道这些位置在核心数据中,但该表仍然是空的:代码如下:

#import "TableTableViewController.h"
#import "DetailViewController.h"
#import <CoreData/CoreData.h>
#import "Spot.h"
#import "AppDelegate.h"




@interface TableViewController ()

@property (strong) NSMutableArray *locations;

@end

@implementation TableViewController

- (NSManagedObjectContext *)managedObjectContext

    NSManagedObjectContext *context = nil;
    id delegate = [[UIApplication sharedApplication] delegate];
    if ([delegate respondsToSelector:@selector(managedObjectContext)])
        context = [delegate managedObjectContext];
    
    return context;



- (void)viewDidLoad 
    [super viewDidLoad];

    NSManagedObjectContext *managedObjectContext = [self managedObjectContext];
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Spot"];
    self.locations = [[managedObjectContext executeFetchRequest:fetchRequest error:nil] mutableCopy];

    [self.tableView reloadData];

    

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 

    return 1;


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


    return self.locations.count;




- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];

    NSManagedObject *ls = [self.locations objectAtIndex:indexPath.row];
    [cell.textLabel setText:[NSString stringWithFormat:@"%@", [ls valueForKey:@"name"]]];


    return cell;

谁能告诉我我做错了什么?

更新: 如果我记录位置-> NSLog(@"%@ 位置是", _locations);我得到一个空结果。这意味着获取的数据没有填充数组,因此表保持为空,对吗?但是为什么没有填充数组呢?

【问题讨论】:

我需要检查我的数据库是否为空?我该怎么做? 为了进行健全性检查,我会在 numberOfRowsInSection 方法中设置一个断点,以确保它被调用,然后,如果它被命中,打印出 self.locations.count 的结果并确保它不是 0。如果断点跳闸并且计数大于 0,那么您有数据。 您尝试过@conarch 的建议吗? 如何实施该建议?我对此有点陌生;这是我的第一个应用程序... 更新:如果我记录位置,像这样 [self.tableView reloadData]; NSLog(@"%@ 里斯本", _llocations);我得到一个空结果。这意味着数组没有接收到获取的数据,对吧?但为什么呢? 【参考方案1】:

检查您的 self.tableView.dataSource 是否为 nil

【讨论】:

对不起,我不明白 - (void)viewDidLoad [super viewDidLoad]; self.tableView.dataSource = self;//添加这个

以上是关于IOS/Objective-C:无法显示核心数据信息的主要内容,如果未能解决你的问题,请参考以下文章

IOS/Objective-C:无法将 CoreData 值保存到 NSArray

ios/objective-c:保存核心数据时出错

IOS / Objective-C:核心数据NSPredicate使用IN不返回所有匹配

IOS/objective-c/core-data:如何从相关实体获取属性

IOS/Objective-C:子视图的子视图不显示

iOS Objective-C AFNetworking dataTaskWithRequest:completionHandler:无法从完成块内部检索数据