2014-01-11 19 views
0

我有2個視圖控制器,在第一個我做無限循環重複計算。如何完全關閉視圖控制器的所有後臺工作,當模態呈現另一個

問題是,我想在展示第二個方法時關閉方法和與第一個方法相關的所有內容。此外,我符合MKMapViewDelegate,每當用戶位置發生變化時,都會觸發該位置,在此處我開始後臺線程工作。

現在,當呈現其他視圖控制器,我想擺脫這一點,並打破所有正在執行的操作。

我試圖設置代表到零,但是當轉回到第一個方法返回,並說

"Collection <__NSArrayM: 0x17f9b100> was mutated while being enumerated."

這是我做的計算功能給出了碰撞,陣中擁有太多的對象,並需要大約10秒來完全檢查此方法。

- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation { 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
     [self makeCalculations]; 
    }); 
} 

-(void)makeCalculations { 
    BOOL okClicked = NO; 

    for(NSDictionary *item in array) { 
     NSInteger responseCode = [[item objectForKey:@"responseCode"] integerValue]; 

     okClicked = (responseCode > 0); 

     if (okClicked) { 
      dispatch_async(dispatch_get_main_queue(), ^{ 
       UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"title" message:@"message" delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil]; 
       alert.tag =10; 
       [alert show]; 
      }); 
     } 
    } 
} 

有沒有什麼線索,你能給我一個例子或建議嗎?

+1

請包括你的一些代碼,或者這個問題是無法回答的。 – jrturton

+0

請提供一些您的代碼。如果你正在使用循環,那麼你可以使用'break'循環內部或循環內的「if」檢查,允許循環運行,直到其他視圖控制器顯示。 – Ankush

+0

編輯問題! – EridB

回答

1

保留一個計數器並在循環中增加它。然後使用類似:

if(counter % 100 == 0) { 
    if(self.cancelled) { 
     self.cancelled = NO; 
     return; 
    } 
} 

現在,只需設置cancelledBOOL當你提出新的模式。

你並不需要嚴格的櫃檯,你可以只檢查該標誌,每次...

+0

感謝您的回答,這是一個好主意,但我的觀點是要知道我是否可以用另一種方式關閉該方法? – EridB

+0

要「關閉」你需要返回的方法。你可以選擇如何觸發它。 – Wain

+0

Thnx Wain,你的第一個答案完美的作品!我花了一些正確配置它! – EridB

相關問題