如何从核心数据表 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 中检索数据?的主要内容,如果未能解决你的问题,请参考以下文章