【问题标题】:Out of scope in KVC generated arrayKVC 生成的数组超出范围
【发布时间】:2009-09-12 17:13:47
【问题描述】:

我正在尝试从其他对象的层次结构中创建一个对象数组,如下所示:

代码 1:

childController.names = [[NSMutableArray alloc] init];

for (Person *p in list.persons) {
    [childController.names addObject:p.name];
}

代码 2:

NSMutableArray *testArray = [list.persons valueForKey:@"name"];

第一个代码 sn-p 完美运行,返回一个人名数组。相反,第二个返回一个包含正确数量的人名的数组,但是当我在 XCode 中调试代码时,它们显示为“超出范围”。当我尝试访问其中一个时,应用程序以以下方式终止:

由于未捕获而终止应用 例外 'NSInvalidArgumentException',原因: '*** -[NSCFSet objectAtIndex:]: 无法识别的选择器发送到实例 0x72e0620'

列表,如果重要的话,人员是 Core Data 管理的对象。我做错了什么???

【问题讨论】:

  • 另外,如果您的 names 属性是 retain 属性,那么当您使用 [[NSMuatableArray alloc] init] 设置它时,您会泄漏(好吧,在您设置后,您将获得 +2 保留计数设置你的属性)。
  • 嗯,你能再解释一下吗?正确的方法是什么?谢谢!

标签: iphone objective-c key-value-coding


【解决方案1】:

您应该检查persons 的类型。看起来它是一个NSSet,而NSSet 上的valueForKey: 将返回一个NSSet。此代码 sn-p 应按预期工作:

NSSet* testSet = [list.persons valueForKey:@"name"];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-19
    • 2019-04-07
    相关资源
    最近更新 更多