我在课堂上有一个数组:
SeqModel.h:
#import <Cocoa/Cocoa.h>
@interface SeqModel : NSObject {
NSMutableArray *stepVolume;
}
-(void) initStepVolume;
-(void) setStepVolume:(char)stepnumber
volume:(char)volume;
-(NSMutableArray *) stepVolume:(char)stepnumber;
@end
和SeqModel.m:
#import "SeqModel.h"
@implementation SeqModel
-(void) initStepVolume
{for (char i=0;i<65;i++){
[stepVolume addObject: [NSNumber numberWithChar:64]];
}
[stepVolume addObject:nil];}
-(void) setStepVolume:(char)stepnumber
volume:(char)volume;
{[stepVolume replaceObjectAtIndex:stepnumber withObject:[NSNumber numberWithChar:volume]];}
-(NSMutableArray *) stepVolume:(char)stepnumber
{return [stepVolume objectAtIndex: stepnumber];}
@end
在我的NSView中,我创建了对象并初始化它,没有错误或警告:
@implementation BeatView
- (id)initWithFrame:(NSRect)frame{
self = [super initWithFrame:frame];
if (self) {
seq1 = [[SeqModel alloc] init];
[seq1 initStepVolume];
}
return self;
}
但是后来的一个函数就是那样的调用
char temp = [seq1 [stepVolume objectAtIndex: [NSNumber numberWithChar:4]]]
在编辑器中给我一个“使用未声明的标识符'stepVolume'”。搜索并搜索,没有找到解决方案。我究竟做错了什么?感谢。
答案 0 :(得分:2)
该行:
char temp = [seq1 [stepVolume objectAtIndex: [NSNumber numberWithChar:4]]]
至少有4个问题:
objectAtIndex
方法采用NSUInteger
类型的参数,而不是NSNumber
。SeqModel
类不提供对stepVolume
实例变量的公共访问权。SeqModel
类中没有定义任何返回char
。尝试:
char temp = [[seq1.stepVolume objectAtIndex:4] charValue];
但这是一个问题,因为stepVolume
不公开。您需要添加属性。更好的是,添加一个获取和索引并返回char的方法。
答案 1 :(得分:1)
对于初学者,你实际上从未在任何地方初始化NSMutableArray
。所以在这方面你应该这样做。
- (void)initStepVolume
{
// Create array
stepVolume = [NSMutableArray array];
for (char i = 0; i < 65; i++){
[stepVolume addObject:[NSNumber numberWithChar:64]];
}
}
然后我不认为你想要返回一个数组,而是像这样返回数字
-(NSNumber *)stepVolume:(char)stepnumber
{
return [stepVolume objectAtIndex:stepnumber];
}
最后,您应该将最后一行更改为
char temp = [[seq1 stepVolume:4] charValue];
我不知道所有char
的处理是什么,但我建议使用整数或浮点数来表示音量和索引。
答案 2 :(得分:0)
我认为你的意思是:
char temp = [[seq1.stepVolume objectAtIndex:4] charValue];
答案 3 :(得分:0)
@property (nonatomic, retain) NSMutableArray *stepVolume;