2012-04-11 6 views
0

다음 방법을 호출 한 후이 예외가 발생합니다. 앱이 처음으로로드 될 때만 제공됩니다. 다시 응용 프로그램을 열면 제대로 작동합니다. 누구든지 도와 줄 수 있습니까?Exc_Bad_Access Iphone에서 데이터베이스를 만드는 중 예외가 발생했습니다.

-(void) createAndCheckDatabase 
{ 
    BOOL success; 

    self.databaseName = @"database.db"; 
    NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentDir = [documentPaths objectAtIndex:0]; 
    self.databasePath = [[documentDir stringByAppendingPathComponent:self.databaseName]retain]; 

    NSFileManager *fileManager = [NSFileManager defaultManager]; 

    success = [fileManager fileExistsAtPath:self.databasePath]; 

    if(success) return; 

    NSString *databasePathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:self.databaseName]; 

    NSError *err; 
    [fileManager copyItemAtPath:databasePathFromApp toPath:self.databasePath error:nil]; 
    if (err) { 
//  DebugLog(@"%@", [err description]); 
    } 

} 
+0

당신은 우리에게 다음 속성을 붙여 넣거나 표시 할 수 있습니까? : self.databaseName? 뭐야? 유지? –

+0

@JonasSchnelli 예 그것의 보유 –

+0

이렇게하면 메모리 누수가 발생합니다 :'self.databasePath = [[documentDir stringByAppendingPathComponent : self.databaseName] retain];'retain'을 제거하십시오. 그러나 충돌은 거기에서 오지 않아야합니다. 디버거로 메소드를 단계별로 실행 했습니까? 어디에서 추락합니까? –

답변

2

오류가 초기화되지 않아서 (err) ... 오류가 발생합니다. fileManager copyItemAtPath에서 사용하지 마십시오 :

+0

초기화되지 않았습니다. 수단이 nil로 설정되지 않았습니까? 이 경우에는 –

+2

입니다. – Chakalaka

+1

ARC를 사용하는 경우 오류가 nil로 초기화됩니다. 그렇지 않으면 "정의되지 않음"이며 아마도 가비지 값이됩니다. 더 나쁜 것은 디버그 빌드에서 0이 될 가능성이 높으며 시뮬레이터와 장치에서 실행될 때 다른 값이 될 수 있습니다. –

1

EXEC_BAD_ACCESS은 항상 포인터 또는 C- 배열을 처리하는 버그를 의미하거나 객체가 -ed 이상 이었음을 의미합니다.

좋은 소식은 디버거 (Xcode에서 실행 중일 경우) 또는 충돌 로그에서 무엇이 잘못되었는지를 보여주는 스택 추적을 가져야한다는 것입니다. (gatherread 충돌 로그 방법).

좀비 도구로 코드 "프로파일 링"은 과다 릴리스에 대한 자세한 정보를 얻는 가장 좋은 방법입니다.

상징적 인 스택 추적을 게시 할 수 있다면 더 나은 진단을 시도 할 수 있습니다.

관련 문제