エラーが発生します
* キャッチされない例外 'NSGenericException' が原因でアプリを終了します。理由: '*コレクション <__NSCFSet: 0x6b66390> が列挙中に変更されました。
クラスに新しいデリゲートを追加するとき。または、少なくとも、そこに問題があると思います。
これは私のコードです: MyAppAPI.m
[...]
static NSMutableSet *_delegates = nil;
@implementation MyAppAPI
+ (void)initialize
{
if (self == [MyAppAPI class]) {
_delegates = [[NSMutableSet alloc] init];
}
}
+ (void)addDelegate:(id)delegate
{
[_delegates addObject:delegate];
}
+ (void)removeDelegate:(id)delegate
{
[_delegates removeObject:delegate];
}
[...]
@end
MyAppAPI は、アプリケーション全体で使用できるシングルトンです。私ができる (またはできるはずの) どこでも: [MyAppAPI addDelegate:self]
.
これはうまく機能しますが、最初のビューでのみです。このビューには、新しいビューをそれ自体にロードする PageViewController を備えた UIScrollView があります。これらの新しいビューは、MyAppAPI に登録して、アンロードされるまでメッセージをリッスンします (この場合は を実行しますremoveDelegate
)。ただし、UIScrollView の 2 番目のビューで addDelegate を実行した直後に停止するようです。
これが起こらないようにコードを改善するにはどうすればよいですか?
更新
もう少し明確にしたいと思います。ビューコントローラー「StartPage」には、ページコントローラーを備えた UIScrollView があります。他のいくつかのビューをロードします (現在表示されている画面の 1 つ前)。各ビューはインスタント PageViewController であり、上記の addDelegate 関数を使用してそれ自体を MyAppAPI というグローバル シングルトンに登録します。ただし、私が理解しているように、ビューコントローラー2がそれ自体を登録するときに、このビューコントローラー1はまだデリゲートから読み取っているため、上記のエラーが表示されます。
シナリオを明確にしたことを願っています。いくつか試してみましたが、何も役に立ちません。デリゲートから読み取り中であっても、addDelegate を使用してデリゲートに登録する必要があります。それ、どうやったら出来るの?
更新 2 これはレスポンダー メソッドの 1 つです。
+ (void)didRecieveFeaturedItems:(NSArray*)items
{
for (id delegate in _delegates)
{
if ([delegate respondsToSelector:@selector(didRecieveFeaturedItems:)])
[delegate didRecieveFeaturedItems:items];
}
}