이 오류가 발생했습니다. 컴파일러는 인스턴스 NSSString 변수의 범위를 벗어났습니다. 전에는 이런 일이 없었으며 수천 개의 NSString 인스턴스 변수를 사용했습니다.iPhone SDK - 인스턴스 변수가 범위를 벗어남 문제
여기
#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
변수가 제대로 합성 내 클래스 .H 파일입니다. viewDidLoad 메서드에서 파일 이름 변수를 초기화합니다. IBAction 메서드 인 recordAudio에서 사용하고 싶지만 컴파일러는 항상 범위를 벗어납니다. 왜 그게, 벌레 일까?
여기에 .m 코드가 있습니다. I는 파일명 인스턴스 변수 세트의 viewDidLoad 방법 :
- (void)viewDidLoad {
[super viewDidLoad];
는 NSString * TMPDIR = NSTemporaryDirectory을(); filename = [NSString stringWithFormat : @ "% .0f. % @", [NSDate timeIntervalSinceReferenceDate] * 1000.0, @ "caf"]; NSLog (파일 이름); }
그리고 IBAction를 방법 전체하는 .m 파일이 여기에서 볼 수 있습니다
- (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 파일의 코드를 볼 수 있습니까? 버그 일 뿐이지 만, 아마도 당신 것입니다. :-) – Eiko
@ 에코 : 원본 게시물에 코드를 추가했습니다. 나는이 일을 천 번 했어. 어디서 잘못 될 수 있는지 모르겠다. 전체 .m 파일은 다음에서 볼 수 있습니다. http://pastie.org/1021993 –
변수를 명시 적으로 유지하거나 속성의 구문 설탕으로 처리해야합니다 (mharper의 대답 참조). – Eiko