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

标签 ios objective-c casting plist info.plist

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

我在想出一种检查类型的好方法时遇到了麻烦。我尝试阅读 [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 类型可靠地执行此操作。完成这项工作的优雅方式是什么?

最佳答案

您正在寻找消息 isKindOfClass:

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

请注意还有 isMemberOfClass:,但您很少会需要它。许多基础对象实际上是基于 Core Foundation 的(即 NSString 大多数时候是 NSCFString)。

关于ios - 正确地将 info.plist 条目转换为 NS* 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29015388/

相关文章:

ios - UIImageview+AFNetworking淡入,图片缓存时也是

objective-c - 自定义 NSScrollers 具有来自核心动画的奇怪效果

java - 无法从 View 转换到 EditText

c - isalnum 等效于使用#define

android - 从网络加载图像时收到“在收到完整 header 之前关闭连接

ios - Cocoa 单例和共享实例

ios - 成功与失败的 Swift 方法链接

string - 将i8的向量转换为Rust中u8的向量? [复制]

ios - 如何使用iOS 13在iPhone上启动场景的多个实例?

ios - 将构建加载到 iTunes Connect 时出现无效的代码签名权利错误