-1

我在一个类中有一个数组:

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'”。找了又找,没有找到解决办法。我究竟做错了什么?谢谢。

4

4 回答 4

2

该行:

char temp = [seq1 [stepVolume objectAtIndex: [NSNumber numberWithChar:4]]]

至少有4个问题:

  1. objectAtIndex方法采用类型的参数NSUInteger,而不是NSNumber
  2. 该类SeqModel不提供对stepVolume实例变量的公共访问。
  3. 方括号的使用都是错误的。
  4. SeqModel返回 a 的类中没有定义任何内容char

尝试:

char temp = [[seq1.stepVolume objectAtIndex:4] charValue];

但这是一个问题,因为stepVolume不公开。您需要添加一个属性。更好的是,添加一个方法来获取和索引并返回一个字符。

于 2013-02-27T19:24:15.743 回答
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's 的处理方式是什么,但我建议使用整数或浮点数来表示音量和索引。

于 2013-02-27T19:25:35.450 回答
0

我想你的意思是:

char temp = [[seq1.stepVolume objectAtIndex:4] charValue];
于 2013-02-27T19:21:49.580 回答
0

你错过了这个:

  @property (nonatomic, retain) NSMutableArray *stepVolume;
于 2013-02-27T19:28:24.013 回答