2014-07-25 1 views
1

나는 무엇이 문제인지 완전히 알지 못합니다.Magical Record - context (저장하지 않음)

특히

가, + MR_contextForCurrentThread를 사용하지 않는 : 나는 그래서하지 + MR_contextForCurrentThread를 사용해서는 안 docs에 따르면

Object *object = [Object MR_createEntity]; 
object.name = @"blahblah"; 
NSManagedObjectContext *context = [NSManagedObjectContext MR_defaultContext]; 
[context MR_saveToPersistentStoreAndWait]; 

: 나는 새로운 객체를 생성하고 문맥에 삽입 해요 + [MagicalRecord saveWithBlock : ...] 메소드 중 하나에서 반환 된 컨텍스트가 올바르지 않을 수 있습니다!

그러나 나는 내 응용 프로그램 데이터를 열면 내가 볼 수있는 3 개 개의 파일 (1) appname.sqlite, (2) appname.sqlite-shm (3) appname.sqlite-wal. 내가 아는 한 2 & 3은 캐시입니다. 2 번과 3 번과 함께 파일 1을 열면 모든 데이터를 볼 수 있습니다. 그러나 파일 1 (어딘가에 2 & 3에서 복사)을 열면 데이터베이스에 데이터가 없으므로 무언가가 정상적으로 작동하지 않을 수도 있습니다.

이 문제는 시뮬레이터에없는 장치에서만 볼 수 있으며 .sqlite를 app 데이터에서 컴퓨터로 복사하는 경우에만 표시됩니다. 3 개의 파일 모두를 복사하면 모든 레코드를 볼 수 있지만 모든 것이 sqlite 대신 캐시에 저장되어있는 것이 좋습니다.

아마도 개체가 생성되었지만 영구 저장소에 삽입되지 않았기 때문에 [Object MR_createEntity]에서 [Object MR_createInContext:context]으로 바꿔야합니까?

답변

1

여기에 입력하신 코드가 정확합니다. shm 파일은 Shared Memeory 로그라고합니다. 그리고 월은 Write Ahead Log라고 부릅니다. SQLite가 저장 및 페치를 더 빠르게 수행 할 수 있도록 도와줍니다. 즉, 항상 sqlite 파일을 열고 데이터 저장소에서 무엇을 볼 수 있어야합니다.

이와 관련하여 살펴볼 몇 가지는 로그를 사용하도록 설정하는 것입니다. 데이터가 저장되지 않은 것은 아마도 필요한 속성을 지정했기 때문에 데이터를 저장하지 않았기 때문입니다. 또한 잘못된 장소를 찾고있을 수도 있습니다.

+0

이 경우에도 월별 및 월별 데이터가 표시되지 않습니다. shm 파일을 만들었지 만이 두 파일을 첨부하면 모든 데이터를 볼 수 있습니다. 외부 편집기로 열면이 파일들이 .sqlite와 합쳐져서 wal과 shm 파일없이 .sqlite 만 사용하여 모든 것을 볼 수 있습니다. – Vive

+0

그런 다음 모든 sqlite 파일에 모든 데이터를 저장하는 가장 좋은 방법은 sqlite의 pragma 옵션을 살펴보고 저장소를 설정하기 전에 적절한 옵션을 설정하는 것입니다. SQLite는 일단 상점이 만들어지면 pragma 설정에 대한 업데이트에 응답하지 않은 것 같습니다. 그러나 내가 잘못한 일을했을 수도 있습니다 ... – casademora