2016-06-23 2 views
0

내 응용 프로그램과 함께 영역 파일을 묶으려고합니다. 나는 1-5 단계를 밟았지만 6 단계에서는 명확하지 않습니다. 특히 문서가 사용자가 편집 할 경우 파일을 다시 문서 폴더로 복사합니다.응용 프로그램과 함께 영역 묶기

Copy 문이 AppDelegate 내부로 들어가고 (예제 이전 코드에서 수행 된 것과 유사) 파일을 복사하면 다음에 응용 프로그램을 시작할 때 어떤 일이 발생합니까? 파일을 다시 복사하고 덮어 씁니 까? 내가 놓친 게 있니?

앱을 출시하기 전에 앱을 한 번 실행해야합니까? 앱 위임자에서 코드를 삭제해야하나요? 당신이 (때문에 코드 서명의) 쓰기 가능하지 않다가 자원 디렉토리에있는 앱의 번들 내부에 저장됩니다 앱을 영역 파일을 묶을 경우이 질문은 영역 - 신속

답변

2

관련되어

편집 할 수 있습니다. 따라서 사용자가이 데이터를 변경할 수있게하려면이 파일을 쓰기 권한으로 일부 디렉토리에 복사해야합니다. 응용 프로그램의 Documents 디렉토리가 좋은 선택 인 것으로 보이며 기본값 인 Realm.Configuration의 기본 디렉토리이기도합니다.

앱의 초기 데이터이고 앱을 실행할 때마다 덮어 쓰지 않으려면 대상 파일이 있는지 확인하고이 경우 초기 데이터베이스를 복사하지 않아도됩니다.

당신은 이런 식으로 작업을 수행 할 수 있습니다

let initialURL = NSBundle.mainBundle().URLForResource("initial", withExtension: "realm")! 
let defaultURL = Realm.Configuration.defaultConfiguration.fileURL! 

if (!defaultURL.checkResourceIsReachableAndReturnError(nil)) { 
    do { 
     try NSFileManager.defaultManager().copyItemAtURL(initialURL, toURL: defaultURL) 
    } catch { 
     // Handle error here 
    } 
} 


let realm = try! Realm() 
+0

@Dimtry 당신을 감사합니다. 한 가지 더 빠른 질문 - 영역이 기본적으로 default.realm을 사용한다는 것을 알고 있습니다. 그러나 초기 db 파일 이름이 다른 경우 특수 영역 구성을 만들어야합니까? 초기 영역 파일을 'default.realm'으로 유지하려고하므로 덮어 쓰는 것이 안전할까요? – Rob8861

+0

'Realm'을 만들 때 영역 파일의 이름을 지정할 수도 있습니다. 자세한 내용은 https://realm.io/docs/swift/latest/#realms를 참조하십시오. 그리고 네, "기본"영역을 초기 영역으로 덮어 쓸 수 있습니다. 실제로 이름이 어떻게 지정되었는지는 중요하지 않습니다. – Dmitry

+0

슬프게도 위의 해결책은 저에게 효과적이지 않았습니다. ! defaultURL.checkResourceIsReachableAndReturnError (nil) 조건은 앱이 시작된 후에 영역이 이미 뷰 컨트롤러에 의해 초기화되고 새로운 default.realm 파일이 생성 되었기 때문에 항상 false입니다. 문제는 뷰 컨트롤러가 영역을 사용하여 데이터를 가져오고 영역 초기화를 중앙 집중화하면 앱이 중단된다는 것입니다. 나는 데이터베이스가 비어 있는지 속임수를 쓰고 검사했다. 그렇다면 나는 그것을 뿌린다. 그렇지 않으면 나는 그렇게하지 않는다. – Rob8861

관련 문제