문제

iTunes와 유사한 마스터-디테일 인터페이스가있는 앱을 만들고 있습니다. iTunes의 재생 목록과 동일한 데이터 계층 구조가 있습니다 ( "재생 목록"그룹이 간단하게 유지할 수 있도록 허용하지 않는 경우는 제외). 다시 말해, 사용자가 수동으로 추가되는 일반 재생 목록이 있습니다. 스마트 재생 목록이 있으며 사용자 정의 술어와 일치하는 모든 항목을 보여줍니다. 마지막으로, 사용자가 전혀 편집 할 수없는 "재생 목록"이 있습니다 (나는 이것을 호출합니다. DefaultFolders), 그러나 본질적으로 그들의 술어는 모든 것을 보여주는 것이라는 점에서 멋진 스마트 재생 목록에 지나지 않습니다. 이들은 iTunes의 "라이브러리"및 "영화"섹션과 같습니다.

이 구조를 재현하려는 시도에서 나는 다음 계층 구조 (핵심 데이터)를 생각해 냈습니다. http://gallery.me.com/davedelong#100084/Screen%20Shot%202009-11-07%20AT%207.17.53%20pm&bgcolor=black (희망적으로 그것은 자기 설명 적입니다)

그러나이 앱에 더 많이 들어감에 따라이 구조는 약간 번거 롭습니다. 예를 들어, 나는 topractfolder 클래스에서 Accessor를 정의했습니다. -(NSSet *)items, 모든 콘크리트 폴더 유형 (DefaultFolder, SmartFolder, 그리고 Folder) 내용물을 쉽게 검색 할 수 있습니다. 이것은 폴더 엔티티와의 관계와 일치합니다. Item 실재. 그러나 나는 그것을 구현할 수 없다 items 액세서 AbstractFolder, 그것은 코어 데이터에 의해 제공된 생성 된 액세서를 무시하기 때문에 Folder 실재. 나는 그것을 모든 콘크리트 폴더가 구현할 프로토콜의 일부로 만드는 것에 대해 생각했지만, 그것은 상속의 목적을 물리 치는 것처럼 보입니다.

그래서 나는 이것을 메일 링리스트의 집단적 지혜까지 열었다. 이 구조를 모델링 할 수있는 더 좋은 방법이 있습니까? 비슷한 구조를 가진 앱에서 작업 한 사람이 있습니까? 무엇을 도움이 되었습니까?

도움이 되었습니까?

해결책 2

나는이 답변에 자세히 설명하는 구조를 생각해 냈습니다. https://stackoverflow.com/questions/1812311#1812924

다른 팁

죄송합니다. 핵심 데이터를 많이 사용하지 않았지만 AbstractFolder에서 항목 액세서를 구현 해야하는 이유는 확실하지 않습니까? 헤더의 카테고리에 그것을 붙여서 구현하는 것을 귀찮게하지 않습니까? 이것은 추상 방법에 대한 표준 접근법입니다.

예를 들어, AbstractFolder.h에는 다음과 같습니다.

@interface AbstractFolder (Abstract)

NSSet *items;

@end

그런 다음 어디서나 구현하는 것을 귀찮게하지 않습니다. 이는 서브 클래스 구현을 사용하도록 강요합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top