CoreData / NSManagedObject 映射,如何检查对象 属性 是否支持传递的类型
CoreData / NSManagedObject mapping, how to check if the object property supports the passed type
我已经编写了一些代码来将数据从服务器映射到我的 CoreData 对象,这一切都按预期工作。但是,我在日志中收到很多无法识别的选择器警告。这基本上是由于服务器对不同的对象类型具有相同的键名。我的代码如下:
for (id key in dict)
{
if ([UsefulFunctions objectContainsData:dict[key]])
{
if (mapping[key])
{
SEL selector = NSSelectorFromString(mapping[key]);
if ([entity respondsToSelector:selector])
{
@try {
// try and set the value, might not work if dict[key] is unexpected type
[entity setValue:dict[key] forKey:mapping[key]];
}
@catch (NSException *exception) {
// deal with the exception
}
}
}
}
}
基本上这段代码所做的是循环遍历服务器传递的 'dict' 个对象。它检查它们是否包含数据,然后根据我设置的映射字典创建选择器(下面的示例):
@"id" : @"nID",
然后检查实体 (NSManagedObject) 是否响应创建的选择器(例如 nID),然后尝试应用数据以检查其有效性。就像提到的那样,一切正常,但是,由于类型不匹配,我在日志中打印了很多烦人的错误。有没有更好的方法来测试 NSManagedObject 是否可以处理传递给它的数据?
例如,nID 包含一个数字,但如果服务器传递一个字符串,应用程序就会崩溃。所以我把它包装在 try / catch 中以阻止这种情况发生。有没有办法在没有 try / catch 的情况下做同样的事情,或者这是正确的方法吗?我不只是想抑制警告。
感谢您的帮助。
这是 NSAttributeDescription
的目的,您可以通过实体的 NSEntityDescription
的 propertiesByName
达到此目的。它会告诉您可用于验证/比较的 attributeType
。另请参阅 attributeValueClassName
,您可以利用它。
我已经编写了一些代码来将数据从服务器映射到我的 CoreData 对象,这一切都按预期工作。但是,我在日志中收到很多无法识别的选择器警告。这基本上是由于服务器对不同的对象类型具有相同的键名。我的代码如下:
for (id key in dict)
{
if ([UsefulFunctions objectContainsData:dict[key]])
{
if (mapping[key])
{
SEL selector = NSSelectorFromString(mapping[key]);
if ([entity respondsToSelector:selector])
{
@try {
// try and set the value, might not work if dict[key] is unexpected type
[entity setValue:dict[key] forKey:mapping[key]];
}
@catch (NSException *exception) {
// deal with the exception
}
}
}
}
}
基本上这段代码所做的是循环遍历服务器传递的 'dict' 个对象。它检查它们是否包含数据,然后根据我设置的映射字典创建选择器(下面的示例):
@"id" : @"nID",
然后检查实体 (NSManagedObject) 是否响应创建的选择器(例如 nID),然后尝试应用数据以检查其有效性。就像提到的那样,一切正常,但是,由于类型不匹配,我在日志中打印了很多烦人的错误。有没有更好的方法来测试 NSManagedObject 是否可以处理传递给它的数据?
例如,nID 包含一个数字,但如果服务器传递一个字符串,应用程序就会崩溃。所以我把它包装在 try / catch 中以阻止这种情况发生。有没有办法在没有 try / catch 的情况下做同样的事情,或者这是正确的方法吗?我不只是想抑制警告。
感谢您的帮助。
这是 NSAttributeDescription
的目的,您可以通过实体的 NSEntityDescription
的 propertiesByName
达到此目的。它会告诉您可用于验证/比较的 attributeType
。另请参阅 attributeValueClassName
,您可以利用它。