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 为零的主要内容,如果未能解决你的问题,请参考以下文章

用例建模Use Case Modeling

用例建模Use Case Modeling

Xcode 4 Core Data:如何使用在数据模型编辑器中创建的获取属性

CoreData:如何建模循环多对多关系

核心数据:设计问题

数据建模——实体#yyds干货盘点#