-3

주된 뷰 컨트롤러에서 노란색 음영을 갖는 뷰를 ​​삭제하려고합니다.핵심 데이터 : 핵심 데이터에 저장된보기를 삭제합니다.

숫자를 올바르게 등록하지만 삭제하지는 않습니다. (setNeedsDisplay를 호출하려고 시도한 뷰와 해당 행을 모두 업데이트하지는 않지만 작동하지 않습니다. 앱을 종료하면 업데이트되고 managedobjectcontext에는 저장되지 않지만 계속 유지됩니다. 보기에서. 내가 뭔가를 공개하지 않는 건가?) 만약 내가 그것을 가지고 그래서 그것은 단지 하나의 항목을 통과했다 .. 당신이 그것을 삭제하려면 클릭 .. 그것은 효과가 있었 겠지만 그림자와 함께 작동하지 않습니다. 왜 볼 수 있니?

업데이트 : 핵심 데이터 (페이지)에 저장된보기가 있으며 페이지를 선택하고 노란색 음영을 표시하고 싶습니다. 그림자를 추가 할 때 배열이나 무언가에 뷰를 추가 한 다음 삭제해야 할 때 뷰를 찾는 방법이 필요합니다.

-(void)trashitems{ 
    for (NSString *itemKey in [itemViews allKeys]){ 
     UIView<CollectionViewItemView> *itemview = [itemViews objectForKey:itemKey]; 
     if ([itemview layer].shadowColor == [UIColor yellowColor].CGColor){ 
      NSLog(@"remove %i",[[NSDecimalNumber decimalNumberWithString:itemKey] unsignedIntegerValue]); 

      if ([dataDelegate respondsToSelector:@selector(collectionView:canDeleteItemAtIndex:)] 
       && [dataDelegate collectionView:self canDeleteItemAtIndex:[[NSDecimalNumber decimalNumberWithString:itemKey] unsignedIntegerValue]] 
       && [dataDelegate respondsToSelector:@selector(collectionView:didDeleteItemAtIndex:)]) 
      {    
       [itemViews release]; 
       NSUInteger itemsCountBeforeDeletion = [dataDelegate countOfItemsInCollectionView:self]; 
       [dataDelegate collectionView:self didDeleteItemAtIndex:[[NSDecimalNumber decimalNumberWithString:itemKey] unsignedIntegerValue]]; 
       NSUInteger itemsCountAfterDeletion = [dataDelegate countOfItemsInCollectionView:self]; 
       if (itemsCountBeforeDeletion - 1 != itemsCountAfterDeletion){ 
        [NSException raise:@"Collection View Deletion Exception" format:@"Count of items in collection view before deletion (%u) must equal one more than count of items in collection view after deletion (%u) but did not.", itemsCountBeforeDeletion, itemsCountAfterDeletion]; 
       } 

      } 
     } 
    } 
} 
+4

귀하의 질문은 혼란 스럽습니다. UIView와 핵심 데이터를 제거하는 사이에 어떤 연결인지 알기가 어렵습니다. 또한 당신의'trashitems' 메소드는'removePageAtIndex'를 호출하지 않습니다. 그 반대도 마찬가지입니다. 그래서 어떻게 연결되어 있는지 분명하지 않습니다. 관리되는 객체 컨텍스트는 UIView를 제어하지 않으므로 실제로 여기에서 무엇을하려고합니까? –

+0

부품을 잊어 버린 코드를 업데이트하려고 시도했지만 코어 데이터 (페이지)에 저장된보기가 있고 선택되었을 때 페이지를 삭제하고 노란 그림자가 나타납니다. – BDGapps

+1

레이어의 음영 색상을 비교하는 것은 삭제할 데이터를 결정하는 나쁜 방법입니다. 모델 객체에'shouldDelete'와 같은 테스트 할 수있는 속성을 부여해야하며,이 속성을 사용하여 어떤 그림자 색상을 사용할 지 결정해야합니다. 현재 계획이 MVC를 명백히 위반하는 것 외에도, 이것이 잘못 될 수있는 방법이 너무 많습니다. '[UIColor yellowColor] .CGColor'는 항상 같은 CGColorRef를 반환합니까? 그래픽 시스템에서 지정하는 색상이 변경되지 않는다고 확신합니까? – Caleb

답변

1

Tom과 마찬가지로 Core Data에보기를 저장하는 것은 기괴합니다. 보기를 사라지게하려면보기 계층에서 제거해야합니다. 데이터는 뷰와 분리되어야합니다. 나는 MVC (Model-View-Controller) 디자인 패턴을 읽을 것을 강력히 제안한다.

1

여기 심각한 디자인 문제가 있습니다. 이것은 간단하게 작동하지 않을 것이며 다시 시작해야합니다.

Apple API는 Model-View-Controller 디자인 패턴을 사용합니다. 진정한 관계를보다 잘 포착 할 수 있기 때문에 Model-Controller-Interface 디자인 패턴이라고해야합니다. 모델은 데이터 및 데이터 동작을 보유하고 컨트롤러는 모델을 인터페이스에 연결하며 인터페이스는 명령 행/GUI, 다른 프로세스 또는 원격 서버 프로세스를 보는 사람과 같은 외부 관찰자에게 데이터를 제공합니다.

내가 내 주요 의 ViewController에서 노란색 그림자가 뷰를 삭제하려고 :

당신은 말한다.

...하지만 실제로는 아닙니다. 하위 뷰 자체는 일종의 데이터를 표시합니다. 노란 그림자가 사용자에게 데이터의 상태에 관한 어떤 종류의 정보를 전달하는 동안 이미지. 노란색 음영은 이미지가 일부 날짜보다 오래된 것을 나타냅니다. 실제로 (이 예제에서) 수행하려는 작업은 특정 날짜보다 오래된 이미지를 삭제 한 다음 사용자 인터페이스의보기에서 해당 변경 사항을 데이터에 반영하려고합니다.

이제 이미지의 데이터와 특정 날짜보다 오래된 상태가 모델에 속합니다. 컨트롤러는 모델에서 데이터를 읽고 제공된 데이터에 따라 뷰와 하위 뷰를 구성합니다. 컨트롤러는 표현 된 데이터의 일부분처럼보기가 왜 보이는지에 대한 논리를 알지 못하며 뷰는 데이터에 대해 전혀 알지 못하기 때문에 표시 할 이미지와 그림자가 어떤 색인지 알 수 있습니다 .

코어 데이터를 사용하는 경우 코어 데이터를 사용하여 모델 레이어를 만듭니다. 컨트롤러, 뷰를 생성하거나 컨트롤러 또는 뷰의 조작과 직접 관련된 모든 상태 정보를 저장하지 마십시오. 이상적으로, 데이터 모델은 결국 인터페이스의 종류에 관계없이 완벽하게 기능해야합니다. 즉, 명령 행, GUI, 웹 페이지 또는 프로세스 간 통신과 동등하게 잘 작동해야합니다. 데이터가 어떻게 결합되는지에 관한 데이터 및 관련 로직 (예를 들어, 특정 날짜보다 오래된 이미지가 삭제 될 필요가 있음)과 직접적으로 관련되지 않은 것을 알거나 신경 쓰지 않는다.

따라서 데이터 및 데이터 논리가 무엇인지 알아 내서 코어 데이터에 넣어야합니다. 컨트롤러 및 뷰의 해당 데이터를 표시하는 UI의 세부 정보를 유지해야합니다.

앱에서 사용하는 데이터 나 데이터 로직이 무엇인지 모르기 때문에 실제로 필요한 것을 정확히 말할 수는 없지만 실제보기와 관련된 모든 정보를 취해야한다는 것을 알고 있습니다. 및 Core Data의 구성에 대해 설명합니다.