基本问题:如何在另一个类中包含类别方法?

时间:2012-10-17 17:00:26

标签: objective-c ios categories

这是一个超级基本的问题。我想在我的应用程序中使用Matt Gemmell的MGImageUtilities类。我已将类UIImage+ProportionalFill.hUIImage+ProportionalFill.m添加到我的项目中。他们定义方法imageScaledToFitSize。但是当我尝试运行应用程序时,出现unrecognized selector sent to instance错误。显然,我必须使该方法可用于我希望它运行的类,但我不知道该怎么做。我在视图控制器的.h和.m文件中都有#import UIImage+ProportionalFill.h,在.h文件中我添加了

@interface UIImage (ProportionalFill)

- (void)imageScaledToFitSize;

@end

但我仍然得到错误。我假设有一些非常基本的东西,我没有做,但我不知道它是什么。

你的想法?

更新:我的项目有以下类:UIImage+ProportionalFill,'GHViewController , and ' GHAppDelegate . UIImage + ProportionalFill`包含以下声明(及相应的实现) ):

- (UIImage *)imageScaledToFitSize:(CGSize)size;

GHViewController.m中,我有以下代码:

    UIImage *img = [self createImage];
    UIImage *pic;
    if (self.serviceType==SLServiceTypeFacebook)
    {
        CGSize size = CGSizeMake((404*320)/([[UIScreen mainScreen] bounds].size.height - 64), 404);
        pic = [img imageScaledToFitSize:size];
    }

这是我打电话imageScaledToFitSize的唯一地方。

2 个答案:

答案 0 :(得分:2)

如果您已包含.m文件,则不应出现unrecognized selector sent to instance错误。所以,我怀疑.m文件没有正确地添加到你的目标,或者你在调用方法时拼错了一些东西,或者把它发送到了错误的对象(不是UIImage的实例)。

如果您提供有关调用方法的方式的更多信息(即,在哪个对象上)以及确切的控制台日志输出,我可能能够进一步帮助您。

要检查.m文件是否实际分配给目标,请转到Xcode中的项目信息窗格并显示目标的构建阶段窗格;在那里你可以找到构建它时包含的所有模块的列表。

作为一般性说明:

  1. 包含您的类别的.h文件将阻止编译器发出有关未定义方法的警告;如果实现可用,不包括.h文件将不会阻止实际调用该方法;

  2. 如果您不包含.m文件,则会获得unrecognized selector sent to instance的例外情况。

答案 1 :(得分:1)

该类别提供了该方法的实现。我认为可能会发生的是你将类别添加到错误的类中。这就像在MyClass中添加一个类别,类别调用类似:

[self count]; // Method from an NSArray