-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を返すクラスには何も定義されていませんchar

試す:

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

しかし、公開されていないため、これは問題ですstepVolume。プロパティを追加する必要があります。さらによいのは、char を取得してインデックスを作成し、返すメソッドを追加することです。

于 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];

すべての 's との関係はわかりませんがchar、ボリュームとインデックスには int または float を使用することをお勧めします。

于 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 に答える