2009-08-25 3 views
1

나는 모든 사람들이 종종 NSOperationQueue를 사용하여 웹 서비스를 통해 일부 데이터를 업로드하는 launchd 데몬을 가지고 있습니다.웹 서비스를 통해 디스크에 항목 영구 업로드

이 데이터를 유지할 수 있어야합니다. 나중에 세션이 종료 될 때 (예 : 컴퓨터가 종료 될 때) 오류 발생시 다시 업로드 할 수 있어야합니다.

이것은 고부하 응용 프로그램이 아니며 때때로 분당 1 ~ 2 개 미만의 항목을 간헐적으로 수신하며 그 사이에 여러 시간 간격이있는 경우가 많습니다. 다음과 같은 장소에서이 지속성없이

내 초기 구현은 다음

  1. 데몬 데이터를 수신한다.
  2. 데몬은 데이터를 MyDataObject 유형의 객체로 구문 분석합니다.
  3. 데몬은 업로드 할 개체로 MyDataObject를 사용하여 NSOperation 하위 클래스의 인스턴스를 만들고이를 NSOperationQueue에 추가합니다.
  4. NSOperationQueue는 가능한 한 웹 서비스를 통해 MyDataObject를 업로드하고 업로드합니다.

이 부분은 모두 정상적으로 작동합니다. 지금 내가 추가하고 싶은 부분은 웹 서비스 실패, 컴퓨터 종료 등의 경우 지속성입니다.

NSKeyed (Un) 아카이버와 함께 MyDataObjects의 NSMutableArray를 사용할 수있는 것처럼 보입니다. 아직 업로드되지 않은 상태이며 배열에서 항목을 제거하는 모든 작업의 ​​끝난 키를 관찰했지만 더 간단한 방법이 있어야하는 것처럼 보입니다. 잘못 될 수있는 공간이 적습니다 (특히 스레드까지). 안전은 간다.

누군가 올바른 방향으로 나를 가리킬 수 있습니까?

답변

1

항목 당 두 개의 연산을 추가 할 수 있습니다. 첫 번째 항목은 로컬 저장소에 항목을 저장하고 두 번째 항목은 첫 번째 항목에 따라 달라지며 성공하면 항목을 로컬 저장소에서 제거합니다.

그런 다음 로컬 저장소에서 항목을 복원하려면 저장소 로컬 작업이 아닌 클라우드 저장소 작업 만 생성합니다. 이전과 마찬가지로 항목은 로컬 저장 영역에서 항목이 제거 된 경우에만 제거되며, 실패한 경우 다음 항목을 위해 항목을 로컬 저장 영역에 남겨 둡니다.

관련 문제