2012-05-29 4 views
1

내가 내 모든 코드에서 사용하는 특정 날짜가있는 NSDate를 초기화 할 bad_exc_access의 I이 일을 해요 제공 @property로 :있는 NSDate 나

.H

@property (nonatomic, retain) NSDate *myDate; 

하는 .m

코드에서 다음
@synthesize myDate; 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
     [formatter setDateFormat:@"yyyy-MM-dd"]; 

     myDate = [formatter dateFromString:@"2050-01-01"]; 
    } 
    return self; 
} 

, 나는이 방법처럼이있는 NSDate를 읽으면 :

NSLog(@"%@",myDate); 

또는 isEqualToDate를 사용하는 경우 exc_bad_access를 제공하십시오

왜 제공됩니까? 속성으로 변수를 액세스하기 위해

+0

주를 초기화하기'에 접근을 사용하는 위험의 적절한 사용을 위해 .. .' 방법 : http://stackoverflow.com/questions/192721/why-shouldnt-i-use-objective-c-2-0-accessors-in-init-dealloc – petert

답변

3

, 당신은 그렇지 않으면, 그냥 뒤에 그것을 저장하는 변수에 바로 할당을하고

self.myDate = [formatter dateFromString:"2050-01-01"]; 

로 호출 할 필요가있다. self.myDate = someDate;을 사용할 때 호출되는 자동으로 생성 된 setMyDate 함수 내에 retain이라는 속성을 선언하면 전달 된 개체의 retain에 대한 호출이 수행되어 개체를 고정시킵니다. 일반적

은, 상기 자동 생성 방법을 통해 속성을 액세스 만에 가장 좋은 방법으로 간주되거나 self.myDate 방법으로 참조 카운팅 기능

+0

대단히 감사합니다! 이제 작동합니다! 스택 오버플로가 10 분을 기다리라고 말하면 대답을 받아 들일 수 있습니다. 그런 다음 다시 답변을 수락합니다! – Piero

+0

self.myDate를 사용하는 대신 속성을 합성하면 ivar이 자동으로 생성됩니다. @synthesize myDate = _myDate; _myDate = [formatter dateFromString : ...];을 사용하십시오. – bbarnhart

+0

그는'dateFromString'에서 반환 된 객체에 대해'retain'을 호출해야합니다. 그렇지 않으면 init 함수의 끝에서 자동으로 해제됩니다 –