iPhone SDK - переменная экземпляра выходит из области видимости - PullRequest
0 голосов
/ 28 июня 2010

Я схожу с ума по этой ошибке. Компилятор говорит вне области видимости для переменной NSSString экземпляра. Никогда раньше не имел этой вещи и использовал тысячи переменных экземпляра NSString!

Вот мой класс .h файл

#import <UIKit/UIKit.h>
#import <AVFoundation/AVFoundation.h>
#import <CoreAudio/CoreAudioTypes.h>
#import "Snapshot.h"

@interface RecordAudioViewController : UIViewController <AVAudioRecorderDelegate, AVAudioPlayerDelegate> {
 NSString *filename;
}

@property (nonatomic, retain) NSString *filename;

- (IBAction) recordAudio;
- (IBAction) playAudio;

@end

Переменная синтезируется правильно. Я инициализирую переменную имени файла в методе viewDidLoad. Я хочу использовать его в метод IBAction recordAudio, но компилятор всегда говорит вне области видимости? Почему это ошибка или что-то в этом роде?

Вот код .m. Метод viewDidLoad, в котором я устанавливаю переменную экземпляра имени файла:

- (void)viewDidLoad {
    [super viewDidLoad];

NSString * tmpDir = NSTevenDirectory (); filename = [NSString stringWithFormat: @ "%. 0f.% @", [NSDate timeIntervalSinceReferenceDate] * 1000.0, @ "caf"]; NSLog (имя файла); }

И метод IBAction

- (IBAction) recordAudio 
{
    NSLog(filename); // here I get out of scope message when moving over with mouse cursor and when steping over this line EXC_BAD_ACCESS
}

Весь файл .m можно увидеть здесь: http://pastie.org/1021993

Ответы [ 3 ]

3 голосов
/ 28 июня 2010

На самом деле, если вы установите имя файла = [NSString stringWithFormat ...], автоматически выпущенный результат НЕ сохраняется.

Однако, если вы используете self.filename = [NSString stringWithFormat ...], он будет сохраненстрока.Вроде как струна выходит из-под тебя, потому что ты ее не удерживаешь.

0 голосов
/ 28 июня 2010

Действительно ли viewDidLoad происходит?Если он не вызывается, это прекрасно объясняет сбой в recordAudio, поскольку он не был инициализирован.

0 голосов
/ 28 июня 2010

Вы упомянули, что инициализируете имя переменной в методе viewDidLoad. если вы подразумеваете nsstring alloc и init методы под инициализацией, я не думаю, что вы идете правильным путем. Нет необходимости инициализировать синтезированную строку или, в более общем смысле, любые строки. Я не уверен, что вы имели в виду это инициализацией, но я высказал свое мнение, основываясь на идее, которую я получил от ваших заданий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...