Core data iOS中的键值类型强制

Core data iOS中的键值类型强制,core-data,ios5,key-value-coding,Core Data,Ios5,Key Value Coding,我正在使用核心数据编写一个应用程序,它严重依赖于从字符串值设置属性。然而,我遇到了一个问题,因为核心数据在创建包装器方法时,使用NSNumber来表示所有数字字段。因此,如果我使用键/值编码setValue:forKey:传入字符串,它会给我一个类型错误: 例如,我有一个对象类型“Building”。在数据模型中,我将一个名为“fbFloors”的属性设置为整数32 然后,在我的代码中,我执行以下操作: Building*b=[NSEntityDescription insertNewObjec

我正在使用核心数据编写一个应用程序,它严重依赖于从字符串值设置属性。然而,我遇到了一个问题,因为核心数据在创建包装器方法时,使用NSNumber来表示所有数字字段。因此,如果我使用键/值编码setValue:forKey:传入字符串,它会给我一个类型错误:

例如,我有一个对象类型“Building”。在数据模型中,我将一个名为“fbFloors”的属性设置为整数32

然后,在我的代码中,我执行以下操作:

Building*b=[NSEntityDescription insertNewObjectForEntityForName:@“Building”inManagedObjectContext:ctx]; [b设置值:@“2”forKey:@“fbFloors”]

这会引发以下异常:

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“属性的值类型不可接受:property=“fbFloors”;所需类型=编号;给定类型=\uu NSCFConstantString;值=2。“

我希望它将字符串值强制为数字,但它不希望。我尝试实现了强制EvalueForFBFloors:但看起来这只适用于MacOSX,而不适用于iOS


有什么想法吗?

您必须将NSNumber的实际实例传递给setValue。比如:

[b setValue[NSNumber numberWithInt:2]forKey:@“FBFLOWES”]


如果您的数据显示为字符串,则可以使用NSNumberFormatter首先将其转换为NSNumber。

如果您这样做会怎么样

- (NSNumber*)fbFloorsValue:(NSString*)valueString
{
    return [NSNumber numberWithInteger: [valueString integerValue]];
}
其中,每个非字符串属性都有一个方法。然后,当您以通用方式设置这些值时

假设您的键(“fbFloors”)位于一个名为的变量中,而您的值(“2”)位于一个名为

id valueObject;
SEL selector = NSSelectorFromString([NSString stringWithFormat:@"%@Value:", key]);
if (selector && [self respondsToSelector:selector]) {
    valueObject = [self performSelector:selector withObject:value];
} else {
    valueObject = value;
}
Building * b = [NSEntityDescription insertNewObjectForEntityForName:@"Building" inManagedObjectContext:ctx]; [b setValue:valueObject forKey:@key];

我之所以希望避免这种情况,是因为我希望能够避免直接编码。有许多字段具有各种类型,但它们都是通过文本提要输入的,因此我希望KVC能够强制执行这些类型,而无需我手动编写每个字段的代码。我曾考虑添加一个名为“fbFloorsString”的字段,它可以为我进行转换,但我希望有一种更自动的方式。