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:错误:

executefetchrequest 导致崩溃

Swift 中的 executeFetchRequest 致命错误

executeFetchRequest 不适用于 propertiesToFetch

NSPredicate,executeFetchRequest 崩溃

executeFetchRequest 挂起并且从不返回错误或继续