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

Posted

技术标签:

【中文标题】正确地将 info.plist 条目转换为 NS* 类型【英文标题】:Correctly casting info.plist entries to NS* types 【发布时间】:2015-03-12 16:36:22 【问题描述】:

我想编写一个辅助类来从我的 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 类型可靠地执行此操作。有什么优雅的方式来完成这项工作?

【问题讨论】:

【参考方案1】:

您正在寻找消息isKindOfClass:

if([val isKindOfClass:[NSNumber class]])

    return (NSNumber *)val;

else

    return nil;

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

【讨论】:

谢谢!作为 Objective-c 的新手,这是一个我不知道的好功能。 没问题,乐于助人。

以上是关于正确地将 info.plist 条目转换为 NS* 类型的主要内容,如果未能解决你的问题,请参考以下文章

如何在 info.plist 文件中为特定游戏关卡中保存的颜色设置创建条目?

Xcode 中 Info.plist 文件上的多个图标条目

使用 XCODE 将 UIRequiredDeviceCapabilities 添加到 info.plist [重复]

Xcode Localization & Internationalization: Exporting for Localization (XLIFF) 不会导出 Info.plist 条目

如何将 Info.plist 文件从 mac os 项目转换为 iphone 项目?

获取 Info.plist 的所有 CFBundleTypeExtensions