데이터베이스 개체와 일부 사진 개체가 있습니다.NSKeyedArchiver로 부분 저장을 할 수 있습니까?
데이터베이스 개체에는 정수 속성과 변경 가능한 사전 속성이 포함되어 있습니다.
정수는 새 사진 객체를 만들고 변경 가능한 사전에 사진 객체에 대한 포인터가있는 경우 변경 가능한 사전 키로 사용할 다음 빈 번호를 추적합니다.
사진 개체에는 이미지, 이미지 설명 및 이미지를 찍은 날짜가 들어 있습니다.
내 applicationDidBecomeActive 및 applicationWillResignActive 메서드가 트리거 될 때 NSKeyedUnarchiver 및 NSKeyedArchiver를 사용하여 이러한 개체를 읽고 쓰는 데 사용하고 있습니다.
그리고 모두 잘 작동합니다. applicationWillResignActive가 트리거되면 NSKeyedArchiver를 호출하고 데이터베이스 객체를 루트로 가리 킵니다. 그런 다음 코더는 정수를 쓴 다음 변경 가능한 사전을 발견하면 해당 사전에 내리고 각 사진 객체가 호출되어 이미지, 설명 및 날짜와 같은 속성을 저장합니다.
내가 말했듯이 모든 것이 잘 작동합니다. 그러나 사진 수의 증가에 따라 느리고 느리게 보였으므로 약간의 타이밍을했습니다.
아카이브를 읽는 것이 쓰기 작업보다 대략 25 배 빠름을 발견했습니다.
그래서 필자는 쓰기면을 빠르게하는 방법으로 새롭거나 변경된 사진 만 쓰는 아이디어를 생각했습니다. 어쨌든 대부분의 사진은 과거의 세션에서 가져온 것이므로 30 ~ 50 개의 사진이있을 수 있으며 이번에는 2 ~ 3 개의 사진 만 촬영할 수 있습니다.
사진이 새롭거나 오래된 것인지 나타내는 플래그를 만들었습니다. applicationWillResignActive가 트리거되고 각 encodeWithCoder 호출을 처리하는 사진 객체에서 자신을 발견하면 사진이 새로운 경우 이미지, 설명 및 날짜를 저장하고 이전 사진은 저장하지 않습니다.
글쎄, 내가 :-) 기대했던 결과를 얻지 않았다
applicationWillResignActive은, 모든 사진은 내가 끝을 작성하는 스킵 트리거 이전 사진 개체를 덮어 쓰기로 빈 사진 오브젝트를 작성하기 같은 열쇠가있어. 그런 다음 다시로드 할 때 bupkis, nada, zip이 있습니다.
첫 번째 질문은 내 개체 트리의 일부만 작성하고 내가 쓰지 않은 부분을 이전의 전체 작성에서 그대로 유지할 수 있습니까? 그게 순진한 생각인지 궁금해지기 시작했습니다.
개리 몬
Rob, 문서 폴더에 저장하기 위해 NSKeyedArchiver로 저장하고 복원하는 개체에서 이미지를 가져 오면 남아있는 내용이 충분히 빠를 것으로 판단됩니다. 그렇다면 더 큰 데이터로 미래를 준비하는 것 외에도 Core Data를 채택하면 어떤 이점이 있습니까? – Gallymon
"Archives and Serializations Programming Guide"문서에서 다음과 같이 보았습니다 : "필요하지 않은 키를 읽지 마십시오. 특정 개체에 대한 아카이브의 모든 정보를 읽을 필요가 없습니다. 그러나 아직 읽지 않은 데이터는 여전히 아카이브의 크기에 기여합니다 .... " 이것은 내가 쓰고있는 객체가 있고 그 중 일부를 쓰지 않아도된다는 것을 의미합니까? 나중에 작성한 모든 객체를 읽을 때 이전에 작성한 객체의 이전 버전이 그대로 남아 있어야합니다. 아니면 내 부분에 대한 오해인가? – Gallymon
@Gallymon 첫 번째 질문에 대한 대답으로, 객체에서 이미지를 가져온 경우 아카이버의 속도는 충분히 빠르지 만 여전히 효율적인 방법은 아닙니다 (컬렉션을 보관할 때 컬렉션의 모든 객체를 쓰는 이유는 무엇입니까? 새로운). 논리 도구는 핵심 데이터이지만, 원하는대로 할 수 있습니다. – Rob