【问题标题】:Correctly casting info.plist entries to NS* types正确地将 info.plist 条目转换为 NS* 类型
【发布时间】: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 类型可靠地执行此操作。有什么优雅的方式来完成这项工作?

【问题讨论】:

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


    【解决方案1】:

    您正在寻找消息isKindOfClass:

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

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

    【讨论】:

    • 谢谢!作为 Objective-c 的新手,这是一个我不知道的好功能。
    • 没问题,乐于助人。
    猜你喜欢
    • 2021-10-01
    • 1970-01-01
    • 2014-11-05
    • 2012-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多