如何从 NSManaged 对象上下文中获取数据
Posted
技术标签:
【中文标题】如何从 NSManaged 对象上下文中获取数据【英文标题】:How to fetch data from NSManaged object context 【发布时间】:2014-04-01 05:35:58 【问题描述】:NSFetchRequest *fetchLLObjects = [[NSFetchRequest alloc] init];
[fetchLLObjects setEntity:[NSEntityDescription entityForName:@"CustomerOrder" inManagedObjectContext:self.managedObjectContext]];
[fetchLLObjects setIncludesPropertyValues:NO]; //only fetch the managedObjectID
NSError *error = nil;
NSArray *allObjects = [self.managedObjectContext executeFetchRequest:fetchLLObjects error:&error];
这里的数组显示为零。但是在数据库中我可以看到有数据。不知道是什么原因。
【问题讨论】:
注释掉 setIncludesPropertyValues:NO。结果还是 nil 吗? 是的,我仍然得到 nil 值。 获取请求后错误对象是否为零? 【参考方案1】:请在 fetchrequest 中添加您的谓词
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"CustomerOrder"
[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"managedObjectID == %@", managedObjectID]] inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
NSArray *fetchedObjects = [self.managedObjectContext executeFetchRequest:fetchRequest error:nil];
【讨论】:
我对这个 ios 很陌生。请告诉我如何获取 managedObjectID 设置谓词是可选的,这不是问题。【参考方案2】:设置以下 2 个属性,您就完成了。
fetchRequest.returnsDistinctResults = YES;
fetchRequest.resultType = NSDictionaryResultType;
希望这会有所帮助。
编辑
NSFetchRequest *fetchRequest= [[NSFetchRequest alloc]init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Songs" inManagedObjectContext:myManagedObjectContext];
//Take properties dictionary
NSDictionary *entityProperties = [entity propertiesByName];
[fetchRequest setEntity:entity];
[fetchRequest setReturnsDistinctResults:YES];
[fetchRequest setPropertiesToFetch:[NSArray arrayWithObject:[entityProperties objectForKey:@"song_type"]]];
NSArray * result = [myManagedObjectContext executeFetchRequest:fetchRequest error:nil];
【讨论】:
对于 NSDictionary *entityProperties 也显示为零。【参考方案3】:你说:“但是在数据库中我可以看到有数据。”
我对这种说法持怀疑态度。我怀疑核心数据存储中不存在CustomerOrder
对象。 “查看”存储内数据的唯一方法是关闭日志模式并使用 3rd 方软件在 .sqlite 文件中达到峰值。
尽管其他人说了什么,但您的 fetch 请求很好。因此,请仔细检查将对象插入存储并保存到上下文的代码。
【讨论】:
以上是关于如何从 NSManaged 对象上下文中获取数据的主要内容,如果未能解决你的问题,请参考以下文章
如何在 XCode 调试器中调试 NSManagedObjects?
PHPhotos 和核心数据。 PHObject 使用啥 NSManaged 对象类型?
如何使用 @selector 和 NSInvocation 从另一个对象调用 NSManaged 对象的 @dynamic 方法?