Xcode4 数据实体建模问题 - 属性的 userInfo 为零
Posted
技术标签:
【中文标题】Xcode4 数据实体建模问题 - 属性的 userInfo 为零【英文标题】:Xcode4 data entity modeling woes - userInfo is nil for Attributes 【发布时间】:2011-11-08 00:24:21 【问题描述】:背景:我正在使用 Xcode 4.2 中包含的数据建模工具来设置我的核心数据实体。我编写了一些将 NSManagedObject 转换为字典的代码,以方便将数据作为 JSON 上传到 Web 服务。我想将某些实体属性标记为不应序列化为 JSON 的实体属性。我希望通过向我不想序列化的每个属性的“用户信息”添加一个键和值来实现这一点。使用 Xcode 4 数据建模工具这样做应该允许以下代码 sn-p 工作(这是 NSManagedObject 类别的一部分,所以这就是“self”):
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];
所以,我的问题是:[description userInfo](如上面上下文中使用的)的结果总是 nil,所以很明显,没有键/值对。我有几个版本的模型,但我确保我正在编辑“当前”版本(并在将键和值添加到实体属性后保存)。另一个有趣的事情是,如果我退出 Xcode(显然是先保存)然后再次打开它,我添加到任何 Attribute 的 User Info 中的东西就消失了。有人对发生的事情有任何想法吗?
【问题讨论】:
【参考方案1】:幸运的是(在我将代码切换为使用实体中的 userInfo 而不是实体上的单个属性之后)我发现了问题所在。
Xcode 4 在选择 xcdatamodel 文件时,在文件检查器的“核心数据模型”下有一个“工具版本最低”属性。我的数据模型的这个属性的值是“Xcode 3.2”。一时兴起,我将此值更改为“Xcode 4.2”。突然,我的 NSAttributeDescription 对象让 userInfo 返回了我所期望的!
我希望有更多关于使用 Xcode 4 进行数据建模的文档。当我进行搜索时,大多数 Apple 文档尚未更新以反映 Xcode 4 中引入的更改。
无论如何,希望这篇文章可以避免我经历的头痛。
【讨论】:
以上是关于Xcode4 数据实体建模问题 - 属性的 userInfo 为零的主要内容,如果未能解决你的问题,请参考以下文章