当我第一次启动iOS项目时,我可以在核心数据中使用大写字母来启动我的属性名称(FirstName,LastName,ect ...)。这对我非常有益,因为我使用Web服务和plists将数据提供给CoreData,并且如果所有属性名称完全匹配,则插入到本地CoraData DB中的对象的创建大大简化并且超快。到目前为止还没有出现问题。目前在xCode 4.3.1中我无法绕过命名约定限制,这让我头疼不已,因为我的远程数据库使用大写字母表示它的列名,而这些列的名称反过来又与我的本地CoreData属性不匹配。 / p>
无论如何在xCode中解决这个问题?
答案 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开头的实体名称来使用以大写字母开头的名称。我通过以下方式解决了这个问题:
重构也改变了数据模型中实体的名称。我相信同样的方法可以用来改变属性的名称。我使用了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];
}
}