正确地将info.plist条目转换为NS *类型

时间:2015-03-12 16:36:23

标签: ios objective-c casting plist info.plist

我想编写一个帮助器类来从我的info.plist中获取值,并将它们转换为正确的类型。所以,如果我尝试访问一个实际上是数字作为日期的属性,我应该回到零或错误。

我无法想出一种检查类型的好方法。我试过阅读[val class]。在下面的示例中,它以__NSTaggedDate的形式返回日期值,这似乎是我不想依赖的实现细节。

    - (NSDate *)dateConfig:(NSString *)name
    {
        _configs = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"myConfigDictionary"];
        id val = [_configs objectForKey:name];

        // TODO how do I tell?
        if([val class] != ???)
        {
            return nil;
        }

        return val;
    }

我想对所有其他plist类型也可靠地执行此操作。完成这项工作的优雅方法是什么?

1 个答案:

答案 0 :(得分:1)

您正在寻找消息isKindOfClass:

if([val isKindOfClass:[NSNumber class]])
{
    return (NSNumber *)val;
}
else
{
    return nil;
}

请注意,还有isMemberOfClass:,但您很少会想要这个。许多基础对象都是基于Core Foundation的(即NSString大部分时间都是NSCFString)。