多くのインスタンスを持ち、それぞれにUIRecognizerがあるUIViewがあります。目的のクラスのすべてのインスタンスを取得しますか?
タップされているときに、他のもののすべての認識機能を削除したいと思います。
私はクラスのすべてのインスタンスを取得し、その認識を削除したいと思っています。
私はManagedObjectsを知ってどのように私は、「すべてのオブジェクト」クラスメソッドを作成することができます[Entity allObjects];
を持っていますか?
多くのインスタンスを持ち、それぞれにUIRecognizerがあるUIViewがあります。目的のクラスのすべてのインスタンスを取得しますか?
タップされているときに、他のもののすべての認識機能を削除したいと思います。
私はクラスのすべてのインスタンスを取得し、その認識を削除したいと思っています。
私はManagedObjectsを知ってどのように私は、「すべてのオブジェクト」クラスメソッドを作成することができます[Entity allObjects];
を持っていますか?
私は2つのアイデアを持っている:
1 /割り当て解除時に登録解除、初期化時にそれらを登録、すべてのインスタンスstatic NSArray* instances;
を持つクラスの配列を作成します。配列は弱い参照のみを持つ必要があります。それ以外の場合は、割り当てが解除されません。
2/NSNotification。すべてのインスタンスは通知を待つことができ、タップすると通知が送信されます。
同じビューのすべてのサブビューの場合は、parentView.subviews
を繰り返してそのように見つけることができます。このような何か:
for (UIView *v in parentView.subviews) {
if ([v isKindOfClass:[MyViewClass class]]) {
// remove recognizer here
}
}
別の、より効率的に、オプションを選択すると、最初の認識器がトリガされたときに設定し、短絡に将来、認識ハンドラの呼び出しを使用して、あなたのビューコントローラのフラグを持っているだろう。このような何か:
@property (nonatomic) BOOL shouldRespondToEvent;
@synthesize shouldRespondToEvent=_shouldRespondToEvent;
- (void)viewDidLoad {
[super viewDidLoad];
self.shouldRespondToEvent = YES;
// other viewDidLoad stuff here
}
- (void)gestureHandler:(UIGestureRecognizer*)recognizer {
if (!self.shouldRespondToEvent)
return;
self.shouldRespondToEvent = NO;
// rest of handler code here
}
デバッグの目的ですべてのインスタンスを見つけるだけであれば、Allocations
計測器を使用してRecorded Types
をクラスに変更することができます。これはあなたのすべてのオブジェクトのちょっとしたリストを与えるでしょう。そのアドレスを使用してlldb
を使用して対話できます。
ありがとう、これは本当に役に立ちます – shannoga