2015-01-21 2 views
1

이 태그는 iOS 태그가 지정되어 있지만 다른 Parse SDK에도 유용 할 것입니다. 아시는 바와 같이 Parse는 너무 오래 전에 iOS SDK에 기본 PFObject 하위 클래스를 생성하는 기능을 추가했습니다. 이것은 여러 가지 이유로 큰 도움이됩니다. 첫째, 컴파일러는 객체의 동적 속성을 생성하여 코드를 확인할 수 있습니다 속성 :구문 분석에 의해 생성되는 PFObject 서브 클래스 개체의 초기화 메서드

myObject[@"myAttribute"]myObject.myAttribute 둘째

로 변환하고,이 질문에 대한 더 중요하다, 사용자 정의 서브 클래스는 기능을 추가 할 수 있습니다. 예를 들어, Parse 클라우드에 Alarm 개체를 저장하는 알람 앱을 만들었다 고 가정 해 보겠습니다. 내 사용자 정의 하위 클래스에서 alarm 객체가 생성, 수정 또는 삭제시 UILocalNotification을 예약/업데이트/제거 할 수 있도록 + (instancetype)object, - (void)saveEventually- (void)deleteEventually 메서드를 재정의 할 수 있습니다.

여기에 상황이 복잡해지고 실제 질문이옵니다. 사용자가 하나의 기기 (클라우드에 업로드)에 알람을 생성 한 다음 자동으로 다른 기기에 동기화한다고합시다. 두 번째 장치는 분명히 백그라운드에서 PFQuery- (BFTask *)findObjectsInBackground으로 내용을 업데이트 한 다음 각 개체에 대해 - (BFTask *)fetchIfNecessaryInBackground을 호출하여 해당 물질이 모두 장치에 있는지 확인합니다. 내 질문은 : PFObject 하위 클래스를 찾거나 파스 클라우드 데이터베이스에서 가져올 때 어떤 메서드가 호출되는지 여부입니다. 그렇다면 객체를 로컬 데이터 스토어에서 초기화하면 어떨까요?

앞서 언급 한 것처럼 다양한 방법을 재정의하면 장치에서 만들고 관리되는 개체가 완벽하게 작동하지만 로컬 또는 오프라인에서 메모리에 방금 도착한 새 개체 내에서 사용자 지정 코드를 실행하는 방법에 대해 당혹 스럽습니다. 원격 데이터 저장소. 이 문제를 해결하는 방법에 대한 생각이나 제안은 많은 도움이 될 것입니다. Parse 문서는 그런 경우를 다루지 않으므로 최선의 방법조차되지 않을 수도 있습니다. 어쨌든, 시간과 통찰력에 감사드립니다.

답변

0

대부분의 하위 클래스가 NSObject 인 경우 이동 방법은 -init 메서드를 무시하는 것일 수 있습니다.

그러나 마지막 단락에서 언급했듯이 그러한 연습은 문서화되어 있지 않으므로 피해야합니다. PFObjects 작업을 통해 동일한 객체의 인스턴스가 여러 개있을 수 있습니다 (복수 PFObjectsobjectId). 그리고 이러한 객체가 생성 된시기와 이유를 제어하지 않기 때문에 초기화 될 때 실행되는 코드에 의존하는 것은 좋지 않은 아이디어입니다. Core Data를 사용하고 있다면, Parse는 실제로 다른 방식으로 처리하기 때문에 모범 사례는 다릅니다.

예를 들어,이 경우는 아니지만 각 개체의 복사본이 저장되기 전에 만들어지면 어떻게 될까요? '캐시 후 네트워크'정책을 사용하여 쿼리를 만들 때 개체가 두 번 생성되면 어떻게됩니까? 비록 당신이 그것을 작동시킨다하더라도, 당신은 프레임 워크의 모든 업데이트로 인해 깨질 수있는 무언가로 끝날 것입니다.

당신이 쿼리 나 로컬 데이터 저장소에서 객체를받을 때 자신을 호출 할 수있는 자신 만의 메소드로 초기화 코드를 묶어야한다고 생각합니다. 오버 라이딩은 객체 지향 프로그래밍에서 좋은 디자인과 실습이지만 몇 가지 예외가 있으며 이것도 그 중 하나라고 생각합니다.

관련 문제