2012-09-22 8 views
-1

UICollectionView가있는 iPhone 응용 프로그램에서 작업 중이며 iPhone 스프링 보드와 같은 폴더를 만들려고합니다. 나는 그것이 작동하지만 핵심 데이터를 사용하는 셀의 덧셈과 뺄셈과 관련하여이 오류가 발생했습니다. 누군가이 오류를 피하는 방법을 설명 할 수 있기를 바랬습니다. 미리 감사드립니다. '잘못된 업데이트 : 때문에 캐치되지 않는 예외'NSInternalInconsistencyException '응용 프로그램 종료, 이유UICollectionView 잘못된 요소 수, 요소 추가 및 삭제

* 기존 섹션에 포함 된 항목의 개수 업데이트 후 단면 0 항목 수가 잘못 (4)와 동일해야 업데이트 전에 해당 섹션에 포함 된 항목 수 (3), 해당 섹션에서 삽입 또는 삭제 된 항목 수를 더한 값 (0이 삽입 됨, 0이 삭제됨) 및 해당 섹션으로 들어오고 나가는 항목 수를 더한 값 또는 빼기 값 (0은 안으로 움직 였고 0은 밖으로 움직였다). '

------ mainViewController

  //**Document One** 
      //get first doc and create it as a sub doc 
      Document * docToCopy = [[self birds] objectAtIndex:longPressFolderLayout.pinchedCellPath.row]; 
      SubDocument *doc = [[SubDocument alloc] initInsertingIntoManagedObjectContext:managedObjectContext]; 
      [doc setTitle:docToCopy.title]; 
      [doc setThumbnail:docToCopy.thumbnail]; 
      [doc setIsFolder:[NSNumber numberWithInt:0]]; 
      [doc setDate:docToCopy.date]; 


      //**Document Two** 
      //get second doc and create it as a sub doc 
      Document * docToCopy2 = [[self birds] objectAtIndex:cellAttributes.indexPath.row]; 
      SubDocument *doc2 = [[SubDocument alloc] initInsertingIntoManagedObjectContext:managedObjectContext]; 
      [doc2 setTitle:docToCopy2.title]; 
      [doc setThumbnail:docToCopy2.thumbnail]; 
      [doc2 setIsFolder:[NSNumber numberWithInt:0]]; 
      [doc2 setDate:docToCopy2.date]; 
      [self add:@"folder" image:[UIImage imageNamed:@"folderDefaultImage"] date:[NSDate date] folder:[NSNumber numberWithInt:1]]; 

      //**Folder** 
      //create a folder and append both sub docs and then remove the original docs 
      Document * origFolder = [[self birds] objectAtIndex:([[self birds]count]-1)]; 
      [origFolder appendDoc:doc]; 
      [origFolder appendDoc:doc2]; 
      [origFolder setIsFolder:[NSNumber numberWithInt:1]]; 
      currentOpenFolder = origFolder; 
      [self removePageAtIndex:longPressFolderLayout.pinchedCellPath.row]; 
      [self removePageAtIndex:cellAttributes.indexPath.row]; 

------ DocumentNSManagedObject

오류 메시지가 UICollectionView 당신은 같은 그것을 제공하는 정보와 함께 할 것입니다
- (void)appendDoc:(SubDocument *)doc 
{ 
[[self mutableSetValueForKey:@"subDocument"] addObject:doc]; 
[(NSMutableArray *)[self subDocumentsOrdered] addObject:doc]; 

    NSError *error = nil; 
[[self managedObjectContext] save:&error]; 
} 
- (void)deleteDoc:(SubDocument *)doc 
{ 
    [[self mutableSetValueForKey:@"subDocument"] removeObject:doc]; 
    [(NSMutableArray *)[self subDocumentsOrdered]removeObject:doc]; 
    NSError *error = nil; 
[[self managedObjectContext] save:&error]; 
} 
- (NSArray *)subDocumentsOrdered 
{ 
if (!subDocumentsOrdered) 
{ 
subDocumentsOrdered = [[[[self subDocument] allObjects] sortedArrayWithOptions:NSSortStable|NSSortConcurrent usingComparator:(NSComparator) ^(SubDocument *stroke1, SubDocument *stroke2) 
          { 
           return [[stroke1 date] compare:[stroke2 date]]; 
          } 
          ] mutableCopy]; 
} 
    return subDocumentsOrdered; 
} 

답변

0

함께 할 수있어 core-data와 함께 할 일이 많이 없습니다. 페이지를 추가하는 위치를 보면 NSManagedObjectContext에 저장하지 않을 것입니다. 간단한 해결책은 다음을 작성하는 것입니다.

[[self managedObjectContext]save:nil]; 

희망이 있습니다. 행운을 빕니다.

+0

문제의 원인과 그 원인을 알고 있습니까? 그렇다면이 질문/답변을 개선하여 여기에 세부 정보를 추가하십시오. –

+0

예를 들어 여기에 표시된 세이브는 오류를 제거하는 동안 앱을 개발하거나 기기에서 테스트 할 때 문제가 될 수있는 최상의 성능을 내지 못할 수도있는 뷰의 전체 재구성을 트리거 할 수 있습니다. –

4

항목을 추가 및 제거하거나 응답하는 경우

기본적으로에서 수행중인 작업은 더하지 않습니다.

것은 당신이 3을 반환하여 collectionView:numberOfItemsInSection:에 반응 즉, 제 0

  • 에 당신은 절에서 3 개 항목으로 시작 있음을 말하고있다.
  • 항목을 삽입하거나 제거하지 않았습니다.
  • 이제 섹션에 4 개의 항목이 있다고 말하면 collectionView:numberOfItemsInSection:에 응답했으며 4을 반환했습니다.

따라서 UICollectionView은 섹션에 추가 항목이 있지만 삽입 할 곳을 지정하지 않았다고 불평하고 있습니다. 그래서 이것이 당신이해야 할 일입니다.

정말 그것이 내가 내 응용 프로그램에서 최근 매우 비슷한 문제를했다 UICollectionView

+0

필자는 테이블 뷰와 관련하여이 문제를 이미 알고있는 것으로 알고 있습니다. 내 코드에서 제공 할 수있는 특정 팁이 있습니까? 고맙습니다. – BDGapps

+0

제공된 코드는 표시된 오류 메시지와 직접 관련이 없으므로 여기에 도움말이 없습니다. 데이터 모델을 변경할 때 올바른 정보를 UICollection에 제공하는지 확인하면됩니다. 코어 데이터 모델과 UICollectionView 간에는 "자동"관계가 없으므로 양측에서 일관되게 작동하는지 확인해야합니다. 즉, 데이터 모델에서 항목을 제거하는 경우 해당 항목을보기에서 제거하고 모델에 항목을 추가하여보기에 추가해야합니다. –

+0

죄송합니다. 당신이하는 말을 이해하지 못합니다. 나는 거기에 항목을 추가하고 삭제하고있다. 업데이트하려면 콜렉션 뷰에 무엇을 호출해야합니까? 얼마나 자주 호출해야합니까? 내가 추가 할 때마다? – BDGapps