문제

핵심 데이터 모델을 사용하는 앱을 구축합니다. 나는 객관적인 C에 새롭고 일반적인 디자인 패턴은 실제로 핵심 데이터와 객관적인 C에 적용되지 않습니다.

나는 Intertubes의 Apple Developer 예제와 다른 소스를 겪었습니다.

핵심 데이터를 활용하려면 ManageDobjectContext를 각 ViewControllers에 전달하고 ViewController가 NSFetchEdResultsControllerDelegate를 구현 한 다음 Fetch를 수행하고 이후 구현을위한 각 방법을 구현해야합니다.

NSFetchedResultsChangeInsert

nsfetchedResultsChangeLete nsfetchedResultsChangeMove nsfetchedResultschangeUpdate

이로 인해 각 ViewController에 약 100 개 이상의 코드가 추가되며 반복해서 쓰는 것과 동일한 코드의 90%입니다. 또한 모든 것을 전달하고 메모리 발자국을 추적해야합니다.

다른 언어에서는 요청시 어디에서나 사용할 수있는 데이터를 유지하고 전달하는 방법을 보유한 몇 가지 클래스의 싱글 톤 모델을 구축 할 것입니다. 객관적인 C에서 그 접근 방식을 취할 수없는 것 같습니다. ManagedObjectContext를 가져 와서 필요한 것을 반환 한 정적 클래스를 구축 할 곳이 있다면, ManageedObjectContext를 모든 견해로 전달해야 할 것입니다. 결과가 준비 될 때 호출되는 대의원 메소드를 구현할 때 비동기 적으로 좋아합니다.

나는 이것이 합리적이며 누군가가 그것을 할 수있는 다른 방법이 없다는 것을 확인하거나 이것을 좋은 방식으로 마무리하는 방향으로 나를 지적하는 데 도움이되기를 바랍니다.

감사:)

도움이 되었습니까?

해결책

핵심 데이터는 설명만큼 복잡하지 않습니다.

일반적으로 iPhone 앱에는 "메인"관리 객체 컨텍스트가 있으며 일반적으로 앱 대의원이 소유합니다. 앱 대의원을 얻을 수있는 한 (힌트 : [[UIApplication sharedApplication] delegate]) 관리 된 객체 컨텍스트에 액세스 할 수 있습니다. 나는 정적 글로벌 변수를 정의하여 앱 대의원을 참조하여 삶을 더 쉽게 만들 수 있도록하고 싶습니다.

일반적으로 일대일 서신이 있습니다 NSFetchedResultsController 인스턴스와 UITableView 인스턴스. 채워진 테이블 뷰 외에도 NSFetchedResultsController. 여러 가지 유사한 뷰가있는 경우 (예 : 동일한 데이터를 다른 방식으로 iPod 앱으로 볼 수있는 탭 표시 줄). NSFetchedResultsController 특정보기 컨트롤러를 도출하십시오.

이제 객체를 편집하기 위해보기 컨트롤러를 만들 때 일반적으로 별도의 관리 객체 컨텍스트에서이를 수행하는 것이 좋습니다. 사용자가 취소하면 컨텍스트를 버리고 변경 사항이 사라집니다. 다시 말하지만, 당신은 정말로 필요하지 않습니다 NSFetchedResultsController 이 견해는 단일 객체 와만 관련되어 있기 때문에이를 위해.

편집이 완료되면, 당신 save: 관리 된 객체 컨텍스트. 다른 관리 객체 컨텍스트를 관리하는 객체는 NSFetchedResultsControllerDelegate 테이블보기를 동기화하는 방법. 다시 말하지만, 이것은 기본 클래스에서 구현 될 수 있으므로 관련 뷰 컨트롤러 의이 기능을 일반화 할 수 있습니다.

다른 팁

Coredata 모델을 절대 사용해야합니까, 아니면 nscoder (nsarchiver, nskeyedarchiver 등)를 사용하는 것이 작동합니까? Coredata는 대부분의 응용 프로그램에서 과잉이라는 것을 알았습니다.

또한 싱글 톤을 사용하여 접근 할 수없는 이유를 명확히 할 수 있습니까? 문제없는 여러 응용 프로그램에서 싱글 톤 공장을 사용했습니다. 공유 (싱글 톤) 인스턴스에서 작동하는 클래스 수준 메소드를 정의하는 것은 상당히 쉽습니다.

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