我现在又开始使用一些Objective-C了。我遇到的问题是将变量传递给类实例的本机init方法。
我在@interface中有这个自定义init:
-(id)init
{
if(self = [super init]) {
level = 1;
NSLog(@"Debug response");
}
return ([NSObject init]); // return self;
}
这是我的App的主要课程:
#import "AppDelegate.h"
#import "PlayableCharacter.h"
@implementation AppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
// Insert code here to initialize your application
NSArray *params = [NSArray arrayWithObjects: @"Elf", nil];
PlayableCharacter *allendar = [[PlayableCharacter alloc] init:params];
}
@end
有人可以解释我做错了什么吗?我认为NSArray对象适合“id”C对象的配置文件。是否将init参数设置为非法或必须以其他方式完成?
错误状态:“'PlayableCharacter'没有可见的@interface'声明选择器'init:'”
答案 0 :(得分:4)
您的-init
方法没有任何参数。它相当于以下C:
void *init();
void *foo = init(bar); // error
如果您想将其称为-init:
,则将其声明为
- (id)init:(NSArray *)params;
然而,这是一个非标准的命名。如果你真的想要一个只需NSArray
的init方法,那么可能会命名为
- (id)initWithArray:(NSArray *)array;
但是从你的示例代码我猜你真的不需要一个数组,你只需要一个参数。所以你要使用
- (id)initWithCharacterClass:(NSString *)className;
然后将其称为
PlayableCharacter *allendar = [[PlayableCharacter alloc] initWithCharacterClass:@"Elf"];
答案 1 :(得分:2)
如果你想使用参数初始化,那么创建一个init
方法,如下所示:
-(id)initWithParams:(NSArray *)params
{
if(self = [super init]) {
level = 1;
NSLog(@"Debug response");
// Do something with params
}
return self;
}
此外,您应该返回self
,而不是[NSObject init]