executeFetchRequest 包含“<null>”和我的数据
Posted
技术标签:
【中文标题】executeFetchRequest 包含“<null>”和我的数据【英文标题】:executeFetchRequest contains "<null>" and my data 【发布时间】:2014-07-04 15:56:46 【问题描述】:在我的 ViewController 中你好:
[super viewDidLoad];
context = [[AppDelegate sharedAppDelegate] managedObjectContext];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"Items" inManagedObjectContext:context]];
NSArray *results = [context executeFetchRequest:request error:&error];
if(error)
NSLog(@"++++++++");
return;
NSLog(@"ARRRAY====%@",[results valueForKey:@"items"] );
而数据是:
("null>", MyGoodData)
如果我在 AppDelegate 中调用这段代码一切正常:
而数据是:
(MyGoodData)
【问题讨论】:
欢迎来到 Stack Overflow。请编辑您的问题并格式化代码,使其作为代码块可读,并提供良好的细节,以便我们可以更好地为您提供帮助。也不要忘记在提问之前搜索,因为很多问题已经被问到了很好的答案。 (: 【参考方案1】:首先,您的错误检查是错误的。你应该检查一下
if (results == nil)
//Error condition
不检查error
的结果。 error
即使在非错误条件下也可以填充。
其次,results
的值是 NSArray
,这意味着键 items
没有值。你可以直接打印出数组的结果:
NSLog(@"ARRAY ==== %@", results);
欢迎使用 ***。
【讨论】:
error
可以在非错误条件下填充吗?你有那个来源吗?
来源是苹果自己。所有接受NSError**
的方法都有一个返回值,用于测试是否失败。检查这些方法的文档。
是的,但是您有关于在非错误条件下填充错误的来源吗?
来源是我自己在编写有关 Core Data 的书时的研究经验,以及我与编写 Core Data 的团队的对话以及与维护 Cocoa 框架的团队中的许多成员的对话。忽略error
指针的结果,除非您从方法调用中获得失败条件。这是 Cocoa 中的规则,Core Data 遵循该规则。 error
指针 IS 用作暂存器,不会重置回 nil
,因此即使在成功的情况下 CAN 也可以填充。
如果您仍然需要源代码,请参阅 ios 开发人员库:错误处理编程指南。第一个标有“重要”的框:developer.apple.com/library/ios/documentation/Cocoa/Conceptual/…【参考方案2】:
NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"Items"];
[request setEntity:[NSEntityDescription entityForName:@"Items" inManagedObjectContext:context]];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"items > 0"];
[request setPredicate:predicate];
NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"range" ascending:YES];
[request setSortDescriptors:[NSArray arrayWithObjects:sort, nil]];
NSError *error = nil;
NSArray *results = [context executeFetchRequest:request error:&error];
【讨论】:
【参考方案3】:解决方案:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"items > 0"];
[request setPredicate:predicate];
【讨论】:
这根本没有任何意义。NSArray
将永远回复-valueForKey:@"items"
。
是的,我可以解释这一点。如果 valueForkey@"items"!=null 比 fetchh。 if (results == nil) - 结果 !=0。当 NSArray *results = [context executeFetchRequest:request error:&error]; 时出现的问题出于某种原因数组添加 以上是关于executeFetchRequest 包含“<null>”和我的数据的主要内容,如果未能解决你的问题,请参考以下文章
NSInvalidArgumentException',原因:'executeFetchRequest:错误:
Swift 中的 executeFetchRequest 致命错误
executeFetchRequest 不适用于 propertiesToFetch