2013-02-27 4 views
-1

У меня есть массив в классе:Objective-C: Вызов изменяемый массив в объекте

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»в редакторе. Искал и обыскал и не нашел решения. Что я делаю не так? Благодарю.

ответ

2

Линия:

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

имеет по крайней мере 4 проблемы:

  1. Метод objectAtIndex принимает параметр типа NSUInteger, а не NSNumber ,
  2. Класс SeqModel не обеспечивает публичный доступ к переменной экземпляра stepVolume.
  3. Использование квадратных скобок - это все неправильно.
  4. В классе SeqModel ничего не определено, которое возвращает char.

Try:

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

Но это проблема, потому что stepVolume не является публичной. Вам нужно добавить свойство. Еще лучше добавьте метод, который принимает и индексирует и возвращает символ.

+0

Спасибо.Но почему массив такой разный? У меня много других переменных (ints, chars и strings), и все они работают, не будучи собственностью. – fw2601

0

Я думаю, что вы имели в виду:

char temp = [[seq1.stepVolume objectAtIndex:4] charValue]; 
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]; 

I не знаю, что сделка со всеми char, но я бы предложил использовать ints или float для томов и индексов.

+0

Спасибо! У меня есть все символы, потому что числа, которые я должен хранить, меньше 200 ... – fw2601

+0

Я вижу. Хорошая оптимизация тогда :) –

0

вы это не хватает:

@property (nonatomic, retain) NSMutableArray *stepVolume; 
Смежные вопросы