CoreData的名称必须以小写字母开头' - 我可以解决这个问题吗?

时间:2012-04-07 15:21:36

标签: xcode core-data naming-conventions

当我第一次启动iOS项目时,我可以在核心数据中使用大写字母来启动我的属性名称(FirstName,LastName,ect ...)。这对我非常有益,因为我使用Web服务和plists将数据提供给CoreData,并且如果所有属性名称完全匹配,则插入到本地CoraData DB中的对象的创建大大简化并且超快。到目前为止还没有出现问题。目前在xCode 4.3.1中我无法绕过命名约定限制,这让我头疼不已,因为我的远程数据库使用大写字母表示它的列名,而这些列的名称反过来又与我的本地CoreData属性不匹配。 / p>

无论如何在xCode中解决这个问题?

6 个答案:

答案 0 :(得分:3)

将第一个字符转换为小写的函数:

-(NSString *)refactorAttributeName:(NSString*)name {
   NSString *first = [[name substringToIndex:1] lowercaseString];
   return [name stringByReplacingCharactersInRange:NSMakeRange(0, 1) 
                                        withString:first];            
}

答案 1 :(得分:1)

简单的答案是否定的。如果您可以控制数据从远程数据库中传出的方式,您可以执行以下操作:

Select FirstName as firstName, LastName as lastName ...

如果这太麻烦了,那么您需要在项目中映射这些,或者不要使用Xcode 4.3及以上。

答案 2 :(得分:1)

您可以随时进入模型包并手动编辑内容文件。并不意味着这个新标准不会在以后咬你。

答案 3 :(得分:0)

我想您可以尝试在4.2中使用大字母打开同一个项目,然后在4.3中重新打开,这将遵循旧约定

答案 4 :(得分:0)

我有类似的问题 - 我想使用以小写字母和xcode开头的实体名称来使用以大写字母开头的名称。我通过以下方式解决了这个问题:

  1. 为实体创建NSManagedObject子类 - 可用的选项 编辑菜单
  2. 使用xcode重构来更改已创建的子类的名称
  3. 重构也改变了数据模型中实体的名称。我相信同样的方法可以用来改变属性的名称。我使用了xcode 4.6.1。

答案 5 :(得分:0)

将Web服务JSON响应映射到Core Data模型时遇到了同样的问题。我没有更改Core Data模型,而是将映射代码更改为以下内容:

for (NSString *key in json) {
     NSString *keyWithFirstCharLowered = [key stringByReplacingCharactersInRange:NSMakeRange(0, 1) withString:[[key substringToIndex:1] lowercaseString]];

    if ([modelClass respondsToSelector:NSSelectorFromString(keyWithFirstCharLowered)]) {
        [modelClass setValue:[json valueForKey:key] forKey:keyWithFirstCharLowered];
    }
 }