【问题标题】:Class resulted from NSClassFromString does not associate with class defined in header file由 NSClassFromString 产生的类与头文件中定义的类不相关
【发布时间】:2011-11-28 03:31:07
【问题描述】:

在下面的代码中,我使用 NSClassFromString 将 NSString "ColorFilter" 转换为类名 ColorFilter。结果 ColorFilter 类似乎与我在 import 语句中的头文件中定义的同名类没有关联。

在我的 .h 文件中:

#import "ColorFilter.h"   //ColorFilter is a subclass of UIViewController which also has an iVars name imageView of UIImageView class

在我的 .m 文件中:

NSString *filter = @"ColorFilter";
UIViewController *myFilterClass = [[NSClassFromString(filter) alloc] initWithNibName:filter bundle:nil];

我从上面一行得到的错误是 [ColorFilter initWithNibName:bundle:]: unrecognized selector sent to instance...

为了测试,我将最后一行修改为:

UIViewController *myFilterClass = [[NSClassFromString(filter) alloc] init];
myFilterClass.imageView = .....;

现在我得到的错误是 -[ColorFilter setImageView:]: unrecognized selector sent to instance...

我的结论是,由 NSClassFromString 生成的 ColorFilter 类对这个 #import "ColorFilter.h" 一无所知。

知道我的错误是什么吗?

【问题讨论】:

    标签: objective-c ios nsstring


    【解决方案1】:

    ColorFilter.m 可能不会与您的应用一起编译。在项目的构建源选项卡中,在编译源下,您是否看到“ColorFilter.m”?如果没有,请将其拖到该列表中。

    【讨论】:

    • 它就在那里。此外,如果我在实例化语句中将 NSClassFromString(filter) 替换为 ColorFilter 。一切都按预期工作。
    • 在颜色过滤器对象上调用 classname 以查看应用程序的名称是什么
    • 请看我对这篇文章的回答。
    【解决方案2】:

    我发现我的一个静态库已经定义了“ColorFilter”类。

    看起来在编译时,可以覆盖静态库中的现有类。但在运行时,静态库中的类优先于动态生成的类。

    【讨论】:

      猜你喜欢
      • 2012-01-28
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 2012-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-16
      相关资源
      最近更新 更多