2014-05-23 8 views
0

나는 FMDatabase를 사용하는 sqlite 데이터베이스 응용 프로그램을 사용하고 있습니다. 내가 UPDATE를 실행하기 위해 여러 번 시도Objective-C : 파일 복사 및 삭제 (FileManager)

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *docsPath = [paths objectAtIndex:0]; 
NSString *db_Path = [docsPath stringByAppendingPathComponent:db_name]; 

나는 문서 디렉토리에있는 데이터베이스의 데이터와 주요 번들

NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:db_name]; 

에있는 데이터베이스의 테이블을 업데이트 할 "기본"데이터베이스에 쿼리하지만 잠겨 있다고합니다. 그래서 db_name_cp라는 이름으로 Documents Directory에서이 문제를 해결하고 작업하는 방법을 생각했습니다.

NSString *cpPath = [documentsDirectory stringByAppendingPathComponent:@"db_name_cp.sqlite"]; 
     success = [fileManager fileExistsAtPath:cpPath]; 
     if (success){ 
      //remove the existing one 
      [fileManager removeItemAtPath:cpPath error:&error]; 
     } 
     //create the copy of the "main bundle" database 
     [fileManager copyItemAtPath:default_database.dbPath toPath:cpPath error:&error]; 

그럼 내가 복사 된 데이터베이스를 통해 UPDATE를 실행하려고하지만 난 그 위에 SELECT를 실행하면 업데이트되지 않습니다 내가 phpMyAdmin을 나는 SQLiteManager에 쿼리를 실행하면이 기록을 업데이트합니다.

아이디어가 있으십니까? 어쩌면 내가 장치 디렉토리를 다룰 때 잘못 대처했을 수도 있습니다.

많은 감사

+0

앱에서 아무 것도 변경할 수 없습니다. 앱의 mainBundle이 포함되어있는 것은 분명합니다. – zaph

+0

예 doc 디렉토리에 저장된 데이터베이스에 대한 UPDATE 쿼리를 실행하는 데 사용하면 제대로 작동합니다. – Spale350z

답변

1

당신은 응용 프로그램에서 아무것도 변경할 수 없습니다, 이것은 분명 앱의 mainBundle 포함이 읽기 전용 서명입니다.

Documents 디렉토리가 올바로 사용되므로 올바른 디렉토리로 사용하십시오.

병합해야하는 경우 문서 디렉토리 DB에 병합하십시오. 또는 번들 DB를 처음 시작할 때 문서 디렉토리에 복사 한 다음 병합하십시오.