2010-02-09 4 views
3

간단한 답이있을 것이라고 확신하는 기본 질문.NSDateComponents - EXC_BAD_ACCESS 오류

사진의 타임 스탬프를 얻으려고합니다. 특정 날짜 요소 (예 : "day")를 검색하기 위해 NSDateComponents에 액세스하려고하면 EXC_BAD_ACCESS 오류가 발생합니다.

첫째, 내 코드의 관련 비트 :

// formattedDateString is a string representing the "DateTimeOriginal" EXIF property extracted from the image 
NSDate *takenAt = [[NSDate alloc] initWithString:formattedDateString]; 
NSLog(@"date: %@", takenAt); // prints= date: 2010-01-10 03:25:00 -0500 

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
NSLog(@"cal: %@", gregorian); // prints= cal: <__NSCFCalendar: 0x10020b570> 

NSUInteger unitFlags = (NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit);  
NSDateComponents *components = [gregorian components: unitFlags 
              fromDate: takenAt 
           ]; 

int days = [components hour]; 
NSLog(@"comp: %@", days); // thrown error= Program received signal: “EXC_BAD_ACCESS” 

내가 마지막 줄 주석 경우 NSLog ("완 %의 @"@, 일); 코드가 성공적으로 실행됩니다.

나는 이것에 대해 몇 가지 변종을 시도했지만 결론은 구성 요소에 대한 메시지를 보낼 때마다 "EXC_BAD_ACCESS"오류가 발생한다는 것입니다.

내가 수행 한 연구 결과는 일반적으로 초기화되지 않은 포인터 또는 릴리스하려고 시도한 개체의 결과라는 것을 나타냅니다. 내가 말할 수있는 것에서는 그것이 여기에 해당하지 않는다.

무엇이 누락 되었습니까?

나를 위해이 문제에 대해 미리 알려 주셔서 감사합니다. 이것은 Objective-C에서의 첫 번째 탐구 중 하나입니다.

NSDateComponents class reference.

답변

7

정수의 서식 지정자로 %@을 사용하고 있습니다. %d을 사용해야합니다.

%@을 사용하는 경우 NSLog 함수는 인수를 개체로 처리하고 description 메시지를 보냅니다. 실제로 일어나는 일은 런타임이 인수 (정수)를 역 참조하려고 시도하지만 유효한 포인터가 아니기 때문에 EXC_BAD_ACCESS 예외가 발생합니다.

+0

내 친구는 훌륭한 대답/설명과 내 말에 우스운 실수입니다. 많은 도움을 주셔서 감사합니다! – Mark