【问题标题】:Test if object is JKArray测试对象是否为 JKArray
【发布时间】:2012-03-23 16:19:37
【问题描述】:

我想看看这个调用的结果:

NSDictionary *results = [jsonString objectFromJSONString];
id contacts=[[results objectForKey:@"list"] objectForKey:@"Contact"];

返回一个数组或字典。

我试过这个:

    [contactdict isKindOfClass:[JKArray class]];

但是JKArray是在JSONKit.m文件中静态声明的,所以xcode是看不到的。

【问题讨论】:

    标签: objective-c reflection jsonkit


    【解决方案1】:

    这就是NSClassFromString 的用途:

    if ([contactDict isKindOfClass:NSClassFromString(@"JKArray")])
    {
        // do stuff here
    }
    

    【讨论】:

    • 太棒了!谢谢理查德:)
    • @PaulWand 没问题,乐于助人!只是不要忘记在可能的情况下接受答案!
    【解决方案2】:

    您可以简单地将@class JKArray; 添加到您进行此调用的文件顶部。这只是告诉编译器有一个名为 JKArray 的类。实际测试当然发生在运行时。

    或者,您应该可以这样做:

    [[contactDict className] isEqualToString:@"JKArray"];
    

    或者这个:

    [contactDict isKindOfClass:NSClassFromString(@"JKArray")];
    

    【讨论】:

    • 更正:实际测试发生在链接时,而不是运行时。
    • 我指的是if ([contactDict isKindOfClass[JKArray class]]) 测试,它肯定发生在运行时。您是正确的,如果 JKArray 未在任何被链接的编译源文件中定义,则链接器将引发错误。但是,只要它确实存在,程序就会链接并正常工作。您将收到一个或多个编译器警告(“receiver 'JKArray' is forward class...”)。 NSClassFromString 或 className 比较方法是更好的方法。
    猜你喜欢
    • 2011-02-24
    • 1970-01-01
    • 2019-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-05
    • 2014-10-11
    • 1970-01-01
    相关资源
    最近更新 更多