Objective-C和另一个类的调用方法:发送给类的无法识别的选择器

时间:2012-05-30 00:50:08

标签: objective-c class methods

我在ClassA中创建了一个方法,并希望在ClassB.m中调用它。

ClassA.h我有这个:

@interface ClassA : NSObject <NSCoding>
...
+ (NSInteger) methodA:(CGPoint)touchPoint;
...
@end

ClassA.m我已声明methodA

+ (NSInteger)methodA:(CGPoint)touchPoint
{
// return an integer based on touchPoint's value
}

ClassB.m

#import "ClassA.h"
...
-(void)methodThatCallsMethodA
    UITouch *touch = [touches anyObject];
    CGPoint touchPoint = [touch locationInView:self];
    NSInteger integerUsingClassA = [ClassA methodA:touchPoint];
    // do some stuff
}

我有一种感觉,问题在于我如何调用方法,而现在正在ClassA的对象是错误的,但我不确定。错误是unrecognized selector sent to class ...。请注意,如果我在methodA内创建与ClassB.m相同的方法,我可以像调用对象methodThatCallsMethodA上的self一样调用它,没有任何问题。

~~~~~~~~~~~

我也在ClassB.h尝试了这个:

#import "ClassA.h"
@interface...
@property(nonatomic, retain)ClassA *objectOfClassA;
...
@end

并更改了ClassB.m

#import "ClassA.h"
@synthesize objectOfClassA;
- (void)methodThatCallsMethodA
{
    UITouch *touch = [touches anyObject];
    CGPoint touchPoint = [touch locationInView:self];
    if(!self.objectOfClassA)
         self.objectOfClassA = [[ClassA alloc] init];
    NSInteger integerUsingClassA = [self.objectOfClassA methodA:touchPoint];
    NSLog(@"ClassA: %i", integerUsingClassA);
}

但现在警告instance method -methodA not found

1 个答案:

答案 0 :(得分:1)

第一部分适用于在ClassA中调用ClassB的类方法部分(+(NSInteger)中标记为ClassA)。第二部分适用于调用ClassAClassB的实例方法部分(-(NSInteger)中标记为ClassA)。

错误是Xcode 4没有保存更改并且正在使用旧版本构建。