2012-07-31 3 views
2

사용자가 다양한 색상과 브러시 크기로 화면을 그릴 수있는 앱을 만들고 있습니다. JSON 파일에 그려진 각 경로에 대한 정보를 일단 메모리에서 꺼내기 위해 그려 넣으면 그 정보를 저장합니다. 지금 당장은 모든 기존 경로를 파싱 한 다음 새 경로를 추가하고 다시 작성합니다. JSON 파일을 읽지 않고 먼저 JSON 파일에 새 데이터를 추가하기 만하면 한 번에 하나의 경로 만 메모리에 저장됩니다.SBJSON은 먼저 JSON 파일에 새로운 데이터를 추가하여 구문 분석하지 않고 새 데이터를 추가합니다.

SBJSON을 사용하고 있는데 JSONWriter에는 몇 가지 추가 기능이 있지만 파일이 아닌 파일에 JSON 문자열을 추가해야한다고 생각합니다. 어쨌든 파일을 읽어야합니다. 파일을 읽지 않고이 작업을 수행 할 수있는 방법이 있습니까? 데이터의 구조가 정확히 무엇인지 알고 있습니다.

답변

2

약간의 속임수가 필요합니다. 경로마다 독립형 JSON 문서를 만들고 파일에 추가 할 수 있습니다. 따라서 파일에 다음과 같은 내용을 갖습니다.

{"name":"path1", "from": [0,3], "to":[3, 9]} 
{"name":"path2", "from": [0,3], "to":[3, 9]} 
{"name":"path3", "from": [0,3], "to":[3, 9]} 

참고 :이 파일은 하나의 JSON 문서가 아니라 3 가지 파일입니다. 그러나 편리하게도 SBJsonStreamParser은 한 번에 여러 JSON 문서를 읽을 수 있습니다. supportMultipleDocuments 속성을 설정하고 SBJsonStreamParserAdapter에 연결하면됩니다. 또한 전체 파일을 읽는 것을 끝내기 전에 그리기를 시작할 수 있으므로 파일에 많은 경로가있는 경우 이점이 있습니다. (당신 때문에 각 경로에 대한 콜백을 얻는다.)

당신은 내가 얼마나 보여 대답 :-) 가능하다 use case here.

+0

테스트가 더 이상 작동하지 않습니다. ( –

+0

프로젝트 구조가 변경되었으므로 해당 링크가 작동하지 않습니다. 실제로이 사용 사례를보다 잘 지원하도록 변경되었습니다. [API 설명서] (http://cocoadocs.org/docsets/SBJson/ 4.0.2/Classes/SBJson4Parser.html)이 더 잘 설명합니다. –

0

나는 그것을 할 수 없다는 확신이 들었다 ... 내가 끝내게 된 것은 JSON 파일에서 문자열을 읽고 나서 메모리를 낭비하는 대신 사전과 배열로 바꾸는 것이었고, 나는 그저 부분의 인스턴스를 찾았다. (예 : 문자열 ""앞에 뭔가를 삽입하고 싶었던 "텍스트" "가 나타났습니다.) 어디에 데이터를 삽입하고 거기에 삽입하고 다시 파일에 썼는지를 나타냅니다.

나는 이것이 최선의 해결책이라고 말할 수있는 한 멀리 있습니다.

+0

에 대한 몇 가지 정보를 볼 수 있습니다. –