我有两门课,Workout和Action。Workout有一个名为associateActionsAndCounts的方法,它接收存储的NSString数据和NSInteger数据,并为它们创建一个Action。现在,Action类有我编写的工厂方法来简化这个方法,但是当我尝试调用其中一个工厂方法时,Xcode告诉我“没有已知的用于选择器‘initWithName:andCount`’的类方法。
Action.h
#import <Foundation/Foundation.h>
@interface Action : NSObject
+(Action *)initWithName:(NSString*)name;
+(Action *)initWithName:(NSString*)name andCount:(NSInteger*)count;
+(Action *)initWithName:(NSString*)name andCount:(NSInteger*)count andImage:(UIImage*)image;
@property UIImage *image;
@property NSString *name;
@property NSInteger *count;
@endAction.m
#import "Action.h"
@implementation Action
@synthesize image;
@synthesize name;
@synthesize count;
#pragma mark - factory methods
+(Action *)initWithName:(NSString *)name {
Action *newAct = [Action alloc];
[newAct setName:name];
return newAct;
}
+(Action *)initWithName:(NSString*)name andCount:(NSInteger*)count {
Action *newAct = [Action alloc];
[newAct setName:name];
[newAct setCount:count];
return newAct;
}
+(Action *)initWithName:(NSString *)name andCount:(NSInteger *)count andImage:(UIImage *)image {
Action *newAct = [Action alloc];
[newAct setName:name];
[newAct setCount:count];
[newAct setImage:image];
return newAct;
}
@endWorkout.m - associateActionsAndCounts (动作和计数为ivars)
-(void)associateActionsAndCounts {
for (int i=0;i<actions.count;i++) {
NSString *name = [actions objectAtIndex:i];
NSString *num = [counts objectAtIndex:i];
Action *newAction = [Action initWithName:name andCount:num]; //no known class method for selector
[actionsData addObject:newAction];
}
}编辑:
有了Michael Dautermann的建议,我的代码现在如下所示:
-(void)associateActionsAndCounts {
for (int i=0;i<actions.count;i++) {
NSString *actionName = [actions objectAtIndex:i];
NSInteger num = [[NSString stringWithString:[counts objectAtIndex:i]] intValue];
Action *newAction = [Action actionWithName:actionName andCount:num];
[actionsData addObject:newAction];
}
}Action.h
+(Action *)actionWithName:(NSString*)name;
+(Action *)actionWithName:(NSString*)name andCount:(NSInteger*)count;
+(Action *)actionWithName:(NSString*)name andCount:(NSInteger*)count andImage:(UIImage*)image;但我还是会犯同样的错误。
对于选择器"actionWithName:andCount“,没有已知的类方法
发布于 2013-07-09 15:09:40
你这里有几个问题。
首先,在代码中传递给"andCount“的”andCount“参数是一个NSString对象,而不是您声明的方法所期望的NSInteger对象。
第二,如果您正在执行这种“工厂”方法,请不要将其命名为"initWithName: andCount:“,因为这意味着您希望在"init”之前使用"alloc“方法。以不同的名称声明它,如"+(Action *) actionWithName: andCount:“。否则,您(或者更糟的是,另一个不是您的程序员)在查看这段代码时会非常困惑,如果接下来会出现内存问题。
发布于 2013-07-09 15:51:10
不知何故,Workout.h和Workout.m不在项目文件夹中,而是在另一个项目文件夹中。所以Action.h不包括在内。
https://stackoverflow.com/questions/17551765
复制相似问题