0

編集: Interface Builder によって作成された UICollectionView を使用する場合、これは発生しないことがわかりました。明らかに、彼らは私たちがインスタンス化していないことを行っています。これが私たちのルーチンです:

UICollectionViewFlowLayout* layout = [UICollectionViewFlowLayout alloc];
[layout setScrollDirection:UICollectionViewScrollDirectionVertical];
colView = [[UICollectionView alloc] initWithFrame:f collectionViewLayout:layout];
[colView setBackgroundColor:[UIColor blackColor]];
[colView setDataSource:self];
[colView setDelegate:self];
[colView setCanCancelContentTouches:NO];
[colView setClipsToBounds:NO];
[colView registerNib:[UINib nibWithNibName:@"CTTextViewCell" bundle:nil] forCellWithReuseIdentifier:@"LabelCell"];
[self.view colView];

適切な削除/挿入が機能するために欠けているものは何ですか?

================

プログラムで生成された UICollectionView を使用すると、非常に奇妙なメモリの問題が発生します (問題になるとは思いませんが)。これらのいずれかを呼び出す場合:

reloadItemsAtIndexPaths:
deleteItemsAtIndexPaths: 
insertItemsAtIndexPaths:  

システムは無限ループに陥り、クラッシュするまでメモリを大量に消費します。

奇妙なことに、reloadData を呼び出してもこの問題は発生しません。実行を一時停止すると、次のように表示されます。一時停止を押したタイミングに基づいて、このスタックの上にさまざまな呼び出しが表示されます。

4   0x32423d86 in -[UICollectionView _endItemAnimations] () 
5   0x000bc174 in -[ASCollectionViewController collectionView:didSelectItemAtIndexPath:] at /Users/rwitman/Documents/git/airshow/photoChuck/Source/ASCollectionViewController.m:248 
6   0x3247ea96 in -[UICollectionView _userSelectItemAtIndexPath:] () 
7   0x3247e7bc in -[UICollectionView touchesEnded:withEvent:] () 
8   0x323e88da in forwardTouchMethod () 
9   0x323e88da in forwardTouchMethod () 
10  0x32259380 in _UIGestureRecognizerUpdate () 
11  0x322911b4 in -[UIWindow _sendGesturesForEvent:] () 
12  0x32290b62 in -[UIWindow sendEvent:] () 
13  0x32265f58 in -[UIApplication sendEvent:] () 
14  0x32264746 in _UIApplicationHandleEventQueue () 
15  0x2faa6f26 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ () 
16  0x2faa63ee in __CFRunLoopDoSources0 () 
17  0x2faa4bde in __CFRunLoopRun () 
18  0x2fa0f540 in CFRunLoopRunSpecific () 
19  0x2fa0f322 in CFRunLoopRunInMode () 
20  0x347462ea in GSEventRunModal () 
21  0x322c61e4 in UIApplicationMain ()  

トップ コールは次のとおりです。

0   0x2fa20a2e in -[__NSFastEnumerationEnumerator nextObject] () 
0   0x2fa1ac76 in -[__NSDictionaryM countByEnumeratingWithState:objects:count:] () 
0   0x39de1898 in objc_object::sidetable_retain() () 
0   0x3a3acd2a in tiny_malloc_from_free_list ()

何が起こっているのかについて何か考えはありますか?

ADDITIONAL 1つの例は、コレクションビューから要素を削除するためのこのかなり無害なコードです

// remove our asset from the local array that provides the data source for the collection view
[elementArray removeObjectAtIndex:index];

// now delete it visually
[colView deleteItemsAtIndexPaths:[NSArray arrayWithObjects:[NSIndexPath indexPathForItem:index inSection:0], nil]];

また、さまざまな dataSource デリゲートにブレーク ポイントを配置して、それらが繰り返し呼び出されているかどうかを確認しましたが、そうではありません。ブレークポイントを介してコードを停止することができず、コードを一時停止するだけでした。

4

0 に答える 0