2011-12-15 46 views
2

我有一個有很多實例的UIView,每個實例都有一個UIRecognizer。獲取目標c中的類的所有實例?

當它們被點擊時,我想刪除所有其他的識別器。

我想讓它得到該類的所有實例並刪除它們的識別。

我知道ManagedObjects已經[Entity allObjects];

如何創建我的「所有對象」類的方法?

回答

5

我有兩個想法:

1 /創建一個類陣列的所有實例static NSArray* instances;,註冊它們初始化時,註銷重新分配的時候。該數組應該只有弱引用,否則它們將永遠不會被釋放。

2/NSNotification。所有實例都可以等待通知,如果點擊,則發送通知。

+0

謝謝這真的很有幫助 – shannoga 2012-01-13 07:27:40

-1

如果它們都是同一視圖的所有子視圖,則可以遍歷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 
} 
0

如果您只是爲了調試目的而需要查找所有實例,則可以使用Allocations樂器並將Recorded Types更改爲僅適用於您的班級。這會給你一個所有對象的清單。然後您可以使用他們的地址使用lldb與他們交互。