2011-07-06 126 views
1

我决定在核心数据中为我的一个实体添加一个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,看到有一个name属性,但不是一个数字。我的核心数据类应该很好,因为我有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

请发布您的People.h'内容。 – akashivskyy

+0

我编辑帖子以包含'People.h' – tazboy

+0

您是否在'People.m'文件中合成了您的'number'属性?你有@动态号码吗? – akashivskyy

回答

0

如有疑问,请将其删除。

我结束了删除我的两个xcdatamodel文件和xcdatamodeld文件。还在各自的文件夹中删除它们。然后我创建了一个新的。起初有一些问题,但现在它确实有效。

我有一个xcode的小问题,我的Group.h文件没有addPeople方法。所以它表示它可能不会对该方法或其他任何方法做出响应。它在构建时也会给我一个Lexical or Preprocessor Issue: 'Group.h' file not found错误,但一切似乎仍然有效。

我还不知道发生了什么事。感谢大家的建议。

1

尝试命名number属性不同的东西,比如theNumber 。有几个已知的reserved words in Core Data attributes,和一个未知的数字(没有双关语意图),这是没有记录 - 你可能已经偶然发现另一个。

+0

改变了它,但没有奏效。不过谢谢。 – tazboy

+0

你有多个版本的数据模型(通过“添加版本”菜单)?如果是这样,你可能会选择错误的当前版本 – RyanR

+0

起初,我认为你是对的,但我改变的版本旁边有一个复选标记,因此它是当前版本。另外,旧版本没有我的群组的“订单”属性,并且已选中,因此我可以为其设置订单并进行打印。该死,我希望是那样。 – tazboy

2

在调试器中打印对象应该为您提供在类中定义的所有属性,无论它是由上下文拥有的NSManagedObject子类还是普通的vanilla自定义类。调试器打印输出不仅缺少number属性,还有image

真的,唯一可能发生的方式是,如果您没有将新版本的类文件添加到目标中,但实际上是使用缺少新属性的旧版本。

检查旧文件的目标和/或检查新版本是否已正确添加到构建目标。

+0

+1优点:重新检查文件的目标。 XCode中功能最强大,用户最不友好的功能之一。 – RyanR

+0

我不确定这是你在说什么,但我去我的目标称为选择 - >构建阶段选项卡 - >编译源下拉列表中,我看到Pick.xcdatamodeld在那里,Pick.xcdatamodel是有但不是我的新版本选择2.xcdatamodel。这可能是问题吗?如果是这样,我该如何解决这个问题? – tazboy

+0

只需使用“ - ”按钮删除旧版本,并添加新的“+”即可。这是您可以自定义编译为源代码的文件的位置。通常这是由Xcode自动设置和维护的,但是当你交换很多东西时会感到困惑。顺便说一下,'Pick 2.xcdatamodel'是否有空间?如果是这样,您可能需要将其更改为下划线以防万一。 – TechZen