2011-09-20 46 views
0

我有一個for循環,它在另一個類中調用UIAlertView彈出菜單在特定條件下觸發的類方法。如果顯示彈出窗口,我想逃避循環。實施這種溝通的通常策略是什麼?檢測過去的UIAlertView

回答

4

我認爲有可能找到一些方法來檢測是否有一些UIAlertView現在被暴露。 但它不是很好。以這種方式構建的程序可能會隨着框架內臟的微小變化而崩潰。你需要一些對象之間的連接。
1.使用委託模式。這是最好的方式。
2.如果對象之間的連接過於複雜或難以預測,導致難以使用委派,請使用通知模式(請閱讀有關NSNotificationCenter類)。

0

您可以在兩個類都可以訪問的地方聲明BOOL。例如:

// declare this variable somewhere that will be accessible to both classes, i.e. a singleton 
BOOL alertIsShown; 

// when showing the UIAlertView: 
alertView.delegate = self; 
[alertView show]; 
alertIsShown = YES; 

// UIAlertViewDelegate method 
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { 
    alertIsShown = NO; 
} 

// in your for loop 
for(...) if(alertIsShown) break; 
1

如果在出現錯誤時類方法顯示UIAlertView,那麼向調用方返回一個錯誤代碼可能會有意義,如果錯誤代碼返回,可能會停止迭代。

一些NS方法做這樣的事情,在那裏你傳遞一個NSError **的方法,如果有一個錯誤,它設置指針,即:

NSError* error = nil; 

for (id object in SomeObjects) { 
    [NSDoSomething:object error:&error]; 

    if (error) break; 
}