我决定将NSNumber属性添加到核心数据中的一个实体中。我清理了代码并从模拟器中删除了应用程序。然后我在appDelegate中添加了以下代码,它告诉我我的NSNumber属性不存在。
People *PeopleA = [NSEntityDescription insertNewObjectForEntityForName:@"People" inManagedObjectContext:context];
PeopleA.name = @"Paul";
PeopleA.number = [NSNumber numberWithInt:12];
name属性工作正常,之前已经完成,并且始终有效。但当它到达PeopleA.number
时,它会崩溃:
-[People setNumber:]: unrecognized selector sent to instance 0x4d5eeb0
所以我做了一个po 0x4d5eeb0
,看到有一个名字属性,但没有一个用于数字。我的核心数据类应该很好,因为我有XCode为我做的。
可能是什么问题?
这是我的People.h
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
@class Group;
@interface People : NSManagedObject {
@private
}
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) id image;
@property (nonatomic, retain) NSNumber * number;
@property (nonatomic, retain) Group * group;
@end
People.m
#import "People.h"
#import "Group.h"
@implementation People
@dynamic name;
@dynamic image;
@dynamic number;
@dynamic group;
@end
po 0x4d5eeb0让我:
<People: 0x5932290> (entity: People; id: 0x59322f0 <x-coredata:///People/t83A9C7D9-4F7A-4189-9EC5-7695968A29552> ; data: {
group = nil;
name = Paul;
答案 0 :(得分:2)
在调试器中打印对象应该为您提供在类中定义的所有属性,无论它是由上下文持有的NSManagedObject子类还是仅仅是普通的自定义类。调试器打印输出不仅缺少number
属性,还缺少image
属性。
真的,唯一可能发生的方法是,如果您没有将新版本的类文件添加到目标但实际上使用的是缺少新属性的旧版本。
检查目标是否存在旧文件和/或检查新版本是否已正确添加到构建目标。
答案 1 :(得分:1)
尝试将number
属性命名为不同的名称,例如theNumber
。有几个已知的reserved words in Core Data attributes和一个未知数字(没有双关语)没有记录 - 你可能偶然发现了另一个。
答案 2 :(得分:0)
如有疑问,请将其删除。
我最终删除了我的两个xcdatamodel文件和xcdatamodeld文件。还在各自的文件夹中删除它们。然后我创建了一个新的。最初有一些问题,但它现在确实有效。
我有一个小问题,xcode认为我的Group.h
文件没有addPeople
方法。因此它表示它可能无法响应该方法或其他任何方法。它在构建时也会引发Lexical or Preprocessor Issue: 'Group.h' file not found
错误,但一切似乎仍然有效。
我仍然不知道发生了什么。感谢大家的建议。