2012-02-11 7 views
2

작업 내용 :NSManagedObject를 대리자로 만드는 것이 좋습니다.

저는 1-30 개의 하드웨어 장치와 동시에 통신하는 응용 프로그램을 개발 중이며 각 장치마다 자체 TCP 연결이 있습니다.

따라서 "hardwareObject"라는 엔티티를 만들었습니다.이 엔티티는 해당 장치의 일부 속성을 나타냅니다. 값 1과 값 2.

"hardwareObject"엔티티의 일시적인 속성으로 정의한 연결 처리기 클래스를 만들었습니다. UI 변경시 핵심 데이터 객체가 수정되고 핵심 데이터 객체 자체가 value1 또는 value2의 변경 사항을 전송하도록 연결을 알립니다.

새 데이터가 대리자 메서드를 통해 도착한 경우 "hardwareObject"의 인스턴스에 알리고 싶습니다. 따라서 해당 특성의 대리인입니다.

NSManagedObject를 s.th의 대리인으로 만들면 궁금합니다. 좋은 연습 이니?

오류 또는 기타 핵심 데이터 관련 문제가 발생할 수 있습니까? 아니면 각각의 연결 핸들러를 처리하고 필요할 때만 핵심 데이터 객체와 통신하는 sharedInstance 마스터 연결 핸들러 객체를 생성해야합니까?

답변

0

그건 완전히 유효한 디자인입니다. NSManagedObjects (관리되는 개체) 컨텍스트에서 관리 할 수 ​​있지만 NSManagedObject 유지할 경우 그것은 유효하며 해당 클래스에서 특별한 비즈니스 논리를 구현하거나 대리자가 자유 롭습니다. 사실 Core Data가 NSManagedObject를 하위 클래스화할 수있게 해주는 대두 중 하나는 이러한 작업을 수행 할 수있는 것입니다.

컨텍스트에서 개체를 삭제해야 할 경우 클래스를 대리인으로 등록 취소해야합니다.

+0

그러면 NSManagedObject 하위 클래스를 "활성"상태로 유지하기 위해 대리자 속성을 할당하는 대신 대리자 속성을 유지하는 것이 좋습니다. – b00tsy

+0

'obj <-> delegate' 관계가있을 때마다 두 끝 (obj 및 delegate)이 서로 관계가있는 한 유효한 지 확인해야합니다. * classic * 접근 방식은 대리자가 obj를 유지하는 방식입니다 (예 :뷰 컨트롤러는 테이블 뷰를 유지합니다.) obj는 델리게이트에 대한 약한 참조를 가지고 있습니다 (테이블 뷰는 뷰 컨트롤러에 약한 참조를가집니다). 이것도 사용할 수 있지만 관리 객체가 없어지면 (-didTurnIntoFault' 내에서) 관리 객체가 자신을 대리자로 설정 해제하는지 확인해야합니다. 그렇지 않으면 포인터가 매달리게됩니다. –

0

좋은 생각 같지 않습니다. 대리인은 최소한 위임자 인 개체만큼 존재해야하며 관리되는 개체의 수명주기를 제어 할 필요가 없습니다. 이는 컨텍스트에서 처리됩니다.

질문에서 언급했듯이 장애가 문제 일 수 있습니다. 모든 상태 정보가 다시 통제에서 사라질 수 있습니다.

또한 MVC에 대한 심각한 위반이라고 생각됩니다.

+0

이것은 어떻게 MVC를 위반합니까? 실제로 상태 변화를 관찰하는 것은 MVC의 필수 요소입니다. KVC는 무엇입니까? 첫 번째 단락에서는 모델 변경 관찰자에 대해 설명합니다 : https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/KeyValueCoding/Articles/KeyValueCoding.html. – Rob

+0

KVC에 대해 이야기하고 있습니까? 나는 MVC에 대해 이야기하고있다. 그들은 완전히 다른 두 가지입니다. – jrturton

+0

MVC 포인트는 OP가 컨트롤러의 모델 객체를 효과적으로 만들 수 있다는 것입니다. – jrturton

관련 문제