그래서 이전 .cpp 파일에 기능을 추가해야합니다. 따라서 Objective C로 다시 작성하는 것은 옵션이 아닙니다. 대신 Objective-C를 사용하여 필요한 기능을 추가했습니다 (NSDate/NSDateFormatter 함수가 많이 필요하기 때문에). 괜찮 았어. 하지만 getter (내보기 컨트롤러에서)를 호출하면이 오류가 발생합니다 : EXC_BAD_ACCESS. 여기 C++ 파일에서 NSDate를 사용하여 EXC_BAD_ACCESS를 수행하는 이유는 무엇입니까?
코드의 단편이다//.h file -----------------
// C/C++ headers
#import <Foundation/NSDate.h>
#import <Foundation/NSDateFormatter.h>
namespace MySpace {
class Session {
private:
// C++ stuff
NSDate * startTime;
public:
// C++ stuff
NSDate * getStartTime();
Session(NSDate * startTime);
};
}
// .cpp file -----------------
using namespace MySpace;
Session:Session (NSDate * startTime) {
// unrelated code
if (startTime == nil){
startTime = [NSDate date];
}
setStartTime(startTime);
// unrelated code
}
void Session::setStartTime(NSDate * startTime){
this->startTime = [startTime copy];
}
NSDate * Session::getStartTime() {
return this->startTime; // here I get the EXC_BAD_ACCESS
}
전체 프로젝트는 오브젝티브 C++로 컴파일 및 ARC 활성화. 이 문제는 ARC에서 'startTime'멤버를 릴리스하고 getter를 호출 할 때 nil을 가리 키기 때문에 발생한다고 생각합니다.
어떻게이 문제를 해결할 수 있습니까?
감사합니다.
나는 그것을 시도했다. 아니, 이걸 반환하려고 할 때 멈춘다. 같은 문제 : EXC_BAD_ACCESS – subzero
Eww. 그래 그리고 나서. 내 대답에 약간의 것을 추가. 시도 해봐. –
옵션 2가 길이었습니다. 재미있는 사실 :이 수업에서는 문제가 없었습니다. 문제는 발신자가했습니다. 누군가 임시 객체의 수명을 연장시킨 후 ... 범위를 벗어나서이 문제를 일으켰습니다. 여기에 더 많은 정보 : http://stackoverflow.com/questions/2615162/return-value-not-a-reference-from-the-function-bound-to-a-const-reference-in Btw. 하나의 질문입니다. "this"는 언제 NULL이 될까요? Line : if (this == NULL)은 nil을 반환합니다. 감사합니다. – subzero