【问题标题】:NSArray valueForKey returning NSNull?NSArray valueForKey 返回 NSNull?
【发布时间】:2014-01-06 13:10:53
【问题描述】:

给定以下代码(使用 magicrecord 获取核心数据):

// Get all of our apps.
NSArray * applications = [Application MR_findAllInContext: [NSManagedObjectContext MR_context]];

Application * application = [applications firstObject];
NSLog(@"Test: %@", application.applicationId);

NSArray * applicationIds = [applications valueForKey: @"applicationId"];
NSLog(@"Application ids: %@", applicationIds);

我得到以下日志:

测试:586001240 应用程序 ID:( "", “” )

我知道applications 数组包含两个条目。每个都有一个独特的applicationId 属性。我不明白为什么对valueForKey 的调用会返回两个空值?相反,我应该得到两个 NSNumber 对象。

我最近发现了 valueForKey(以前为了获得唯一的条目,我会使用枚举并将条目添加到数组中)。我正在尝试使用 valueForKey 来提高可读性。显然我没有正确理解某些东西。关于我哪里出错的任何提示?

编辑 - 更多细节:

Application 类是通过核心数据模型生成的。接口定义为:

@interface Application : NSManagedObject

@property (nonatomic, retain) NSNumber * applicationId;
@property (nonatomic, retain) NSString * name;

@end

【问题讨论】:

  • 我想你想使用NSDictionary?我也觉得valueForKey:方法属于KVO,不能像你这样使用
  • Application 的界面是什么样的?是否符合键值?
  • 您的代码看起来不错,所以我们需要查看 Application.applicationId 属性的实现和声明。如果它只是一个标准的核心数据属性,则可能存在故障问题。
  • 谢谢大家。想通了并发布了答案。问题是我使用MR_context 作为我的上下文而不是MR_defaultContext

标签: ios cocoa nsarray


【解决方案1】:

想通了 - 我的问题非常愚蠢。

我不得不改变:

[Application MR_findAllInContext: [NSManagedObjectContext MR_context]];

成为:

[Application MR_findAllInContext: [NSManagedObjectContext MR_defaultContext]];

这解决了问题。

【讨论】:

  • 供其他人学习(因为MR_defaultContext是您自己的方法),考虑到Application * application = [applications firstObject];有效,问题的根本原因是什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多