Xcode4数据实体建模问题 - 对于属性,userInfo为零

时间:2011-11-08 00:24:22

标签: objective-c core-data xcode4.2

背景:我正在使用Xcode 4.2中包含的数据建模工具来设置我的核心数据实体。我编写了一些代码,将NSManagedObject转换为字典,以便于将数据作为JSON上传到Web服务。我想将某些实体属性标记为不应序列化为JSON的实体属性。我希望通过向每个我不想序列化的属性的“用户信息”添加一个键和值来实现此目的。使用Xcode 4数据建模工具这样做应该允许以下代码片段工作(这是NSManagedObject上类别的一部分,所以这就是“自我”):

NSDictionary *attributesByName = [[self entity] attributesByName];
NSMutableDictionary *valuesDictionary = [NSMutableDictionary dictionaryWithCapacity:[attributesByName count]];

[valuesDictionary setObject:[[self entity] name] forKey:@"ManagedObjectName"];

for (NSString *attributeName in [attributesByName allKeys])
{
    NSAttributeDescription *description = [attributesByName objectForKey:attributeName];
    id dontSerializeValue = [[description userInfo] valueForKey:@"dontSerialize"];
    if (!dontSerializeValue)
    {
        id attributeValue = [self valueForKey:attributeName];
        [valuesDictionary setObject:((attributeValue) ? attributeValue : [NSNull null]) forKey:attributeName];
    }
}

所以,我的问题是这样的:[描述userInfo]的结果(如上面的上下文中所使用的)总是为零,所以很明显,没有键/值对。我有几个版本的模型,但我确保我正在编辑“当前”版本(并在将键和值添加到实体属性后保存)。另一个有趣的事情是,如果我退出Xcode(显然先保存)然后再打开它,我添加到任何属性的用户信息的东西都消失了。有没有人知道发生了什么?

1 个答案:

答案 0 :(得分:2)

通过纯粹的运气(在我将代码转换为使用来自我的实体的userInfo而不是实体上的单个属性之后),我发现了问题所在。

在选择xcdatamodel文件时,Xcode 4在“文件检查器”中的“核心数据模型”下具有“工具版本最小”属性。我的数据模型的这个属性的值是“Xcode 3.2”。一时兴起,我将此值更改为“Xcode 4.2”。突然,我的NSAttributeDescription对象让userInfo返回我期望的内容!

我希望有更多使用Xcode 4进行数据建模的文档。当我进行搜索时,大多数Apple文档都没有更新以反映Xcode 4中引入的更改。

无论如何,希望这篇文章可以帮助别人解决我遇到的麻烦。