-1

UICollectionView を使用して iPhone アプリに取り組んでおり、iPhone のスプリング ボードのようなフォルダーを作成しようとしています。動作していますが、コアデータを使用したセルの加算と減算に関してこのエラーが発生しています。このエラーを回避する方法を誰かが説明してくれることを望んでいましたか? 前もって感謝します。

*キャッチされない例外 'NSInternalInconsistencyException' が原因でアプリを終了しています。更新前のそのセクション (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

- (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;
}
4

2 に答える 2

4

エラーメッセージは、UICollectionViewアイテムを追加および削除したり、次のUICollectionViewDataSourceようなメソッドに応答したりするときに提供する情報とに関係しています。collectionView:numberOfItemsInSection:

基本的に、実行しているアクションは合計されUICollectionViewません。

それはセクション0であなたにそれを伝えています

  • セクションの3つの項目から始めます。つまり、をcollectionView:numberOfItemsInSection:返すことで応答しました3
  • アイテムを挿入または削除していません。
  • これで、セクションに4つの項目があると言います。つまり、をcollectionView:numberOfItemsInSection:返すことで応答しました4

そのためUICollectionView、セクションに余分なアイテムがあると言っているのに、どこに挿入するのかを教えていないという不満があります。だから、これはあなたがする必要があることです。

core-dataそれは実際にはそれとはあまり関係がありませんUICollectionView

于 2012-09-24T09:58:43.773 に答える
0

最近、アプリで非常によく似た問題が発生しました。ページを追加している場所を見ると、NSManagedObjectContextに保存していないに違いありません。簡単な解決策は、次のように書くだけです。

[[self managedObjectContext]save:nil];

お役に立てれば。幸運を。

于 2012-09-26T02:22:51.840 に答える