即使在向构造函数添加行(例如
)之后,我也遇到了无法初始化类对象的问题self = [super init];
或
self = [[super init] alloc];
我不知道该怎么做。
这是具体的错误:
file:///%3Cunknown%3E: test failure: -[LinkedListTest testAdd] failed: *** +[NList<0x8e14> init]: cannot init a class object.
的.m
@interface NList()
@property (weak, nonatomic, readwrite) NSObject *head;
@property (nonatomic,readwrite) NSInteger *size;
@end
@implementation NList
@synthesize size = _size;
- (id) init:(NSInteger *)size {
//is this even necessary? I don't want object methods.. or do I ?
if (self){
_head = nil;
_size = size;
}
return self;
}
.h
@interface NList : NSObject
@property (nonatomic,readonly) NSInteger *size;
@property (weak, readonly, nonatomic) NSObject *head;
- (void)add:(NSObject *)node;
@end
测试类
- (void)testAdd
{
NList *testList = [[NList init] alloc];
// Card *testCardOne = [[Card init] alloc];
// [testList add:(testCardOne)];
XCTAssertNotNil(testList.head);
}
我尝试添加行
self = [[super init] alloc];
到构造函数无济于事。
nlist声明没有可见的接口
or self = [super init]
抱怨无法初始化一个类对象!
我意识到这不是问我的大小!构造函数需要一个size参数......我该怎么做!啊[查找文档]
答案 0 :(得分:3)
你有点倒退。
怎么样:
NList *testList = [[NList alloc] init:SIZE];
其中size是您要使用的SIZE初始化。
当您实例化Objective-C对象时,Alloc在init之前出现。
答案 1 :(得分:3)
一些事情。
您需要默认构造函数
- (id)init {
self = [super init];
if (self) {
self.head = nil;
}
return self;
}
既然你有一个默认构造函数(调用超类构造函数),你需要一个更具体的构造函数。
- (id)initWithSize:(int)size {
self = [self init]; // sets head, calls super constructor.
if (self) {
self.size = size;
}
return self;
}
编辑:注意,最后一个必须在您的.h
文件中,以便可见。
而且,在实例化这个类时,请调用
NList *list = [[NList alloc] initWithSize:mySize];