如何从核心数据表 ios 中检索数据?

Posted

技术标签:

【中文标题】如何从核心数据表 ios 中检索数据?【英文标题】:how do retrieve data from core data table ios? 【发布时间】:2014-06-15 10:17:44 【问题描述】:

您好,我在我的测试项目中使用核心数据。 我能够将 json 中的内容添加到核心数据实体“书”。但是当我尝试检索数据时,我只得到最后一个“数据”(总共 37 个数据)? 我创建了一个 mutablearray 'directors' 来插入每个检索到的值,但这也不起作用。

请检查我的代码。

 NSError *error;
    if (![context save:&error]) 
        NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]);
    
    directors=[[NSMutableArray alloc]init];


    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription
                                   entityForName:@"Book" inManagedObjectContext:context];
    [fetchRequest setEntity:entity];
    NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];

    for (NSManagedObject *info in fetchedObjects) 
        NSLog(@"1");
        [directors addObject:[info valueForKey:@"director"]];
        NSLog(@"Name: %@", info);

    
    NSLog(@"%@",directors);

正在打印 'NSLog(@"1"); 以检查循环工作了多少次,但是 并得到这样的输出

2014-06-15 15:40:03.665 test[12489:1303] Name: <Book: 0x8c50580> (entity: Book; id: 0x8c66a60 <x-coredata://EEF91D97-C982-40E1-A898-9E646D206B39/Book/p1> ; data: <fault>)
2014-06-15 15:40:03.665 test[12489:1303] 1
2014-06-15 15:40:03.666 test[12489:1303] Name: <Book: 0x8c690d0> (entity: Book; id: 0x8c68420 <x-coredata://EEF91D97-C982-40E1-A898-9E646D206B39/Book/p2> ; data: <fault>)
2014-06-15 15:40:03.666 test[12489:1303] 1
2014-06-15 15:40:03.667 test[12489:1303] Name: <Book: 0x8f9c8d0> (entity: Book; id: 0x8d89870 <x-coredata://EEF91D97-C982-40E1-A898-9E646D206B39/Book/p3> ; data: 
    actors = "Hazel Crowney, Kiran Kumar, Shahbaaz Khan, Usha Bachani, Mohammed Iqbal Khan, Alka Verma";
    censor = U;
    director = "Arshad Yusuf Pathan";
    global = N;
    lang = Hindi;
    length = "";
    rating = 0;
    releasedate = "13th Jun 2014";
    synopsis = "The story of a racecar driver who loses his eyesight. While he suffers a setback, he learns about the true value of the relationships in his life. Through the course of the film, the hero realizes the";
    title = Unforgettable;
    trailer = "";
    type = MT;
    url = "http://cnt.in.bookmyshow.com/Events/Mobile/ET00022474.jpg?dtm=15614303";
)

当前代码

【问题讨论】:

【参考方案1】:

我从日志中可以看出,除了最后一个之外,您从 CoreData 收到的所有托管对象都出现故障。这意味着这些对象是代表实体(书)的适当类的实例,但它们没有被初始化。如果您尝试访问已接收记录的某些字段,它们将自动初始化。 我想对您的代码进行以下修改应该可以工作:

for (Book *info in fetchedObjects) 
    NSLog(@"1");
    [directors addObject:info.director];
    NSLog(@"Name: %@", info);


NSLog(@"%@",directors);

这里的Book 是一个继承自NSManagedObject 的类,表示名为Book 的实体。您可以通过突出显示 CoreData 模型中的实体并从 Editor 菜单中选择 Create NSManagedObject subclass 项来为任何实体生成此类。

有关故障的更多信息:Core Data Programming Gudie

【讨论】:

是的,您应该创建一个 Book 类,它是 NSManagedObject 的子类。请使用 Xcode 的自动生成器(Editor->Create NSManagedObject subclass) 能否请您发布更新后的代码和日志输出? 谢谢!看看你用 json 数据填充 CoreData 的代码就好了。 但是为什么它只检索一个数据呢? 你在这里:pastebin.com/zAX7ZyhD。我的意思是 failedBankInfo 的创建应该在 for 循环内(而不是之前)。

以上是关于如何从核心数据表 ios 中检索数据?的主要内容,如果未能解决你的问题,请参考以下文章

从核心数据数据库中检索数据的替代方法 - ios

我们如何检索在 iOS 中使用核心数据保存的数据

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

我可以从服务器检索数据并将其存储在核心数据中吗?

在swift ios中再次运行应用程序后核心数据显示故障记录?

iOS 检索 Web 响应数据后如何从 JSON 中检索值