2014-02-09 42 views
0
-(void) parseXML 
{ 

     [self performSelector:@selector(parseXML) withObject:self afterDelay:55.0 ]; 

    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://apikeygoeshere.com/data.xml"]]; 


    NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; 

    NSString *xmlString = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding]; 

    NSDictionary *xml = [NSDictionary dictionaryWithXMLString:xmlString]; 

    NSMutableArray *items = [xml objectForKey:@"TeamLeagueStanding"]; 

    NSMutableArray *newTeamObjectArray = [[NSMutableArray alloc] init]; 

    for (NSDictionary *dict in items) { 
     TeamObject *myTeams = [TeamObject teamFromXMLDictionary:dict]; 
     [newTeamObjectArray addObject:myTeams]; 
    } 

    NSNull *nullValue = [NSNull null]; 
    NSNull *nullValue2 = [NSNull null]; 

    [newTeamObjectArray insertObject:nullValue atIndex:0]; 
    [newTeamObjectArray insertObject:nullValue2 atIndex:1]; 

    NSLog(@"standingsdataaaaa %@", newTeamObjectArray); 

} 

我想向故事板添加一個解除按鈕,以便用戶可以隨時刷新數據,但是我不會讓他能夠更多地執行此操作比每小時一次,如何防止一直在調用方法

任何人都可以幫助我嗎?謝謝。

回答

1

編輯:爲了說明你仍然想每隔55秒運行一次parseXML方法,不管按鈕是否按下,我都會改變我的答案,將條件放在由按鈕觸發的IBAction方法中按下而不是將條件放在parseXML中:

聲明NSTimer作爲類變量。例如,在直接您的m您@synthesize年代後上方,宣告一個NSTimer:

NSTimer *parseTimer; 

然後由按下按鈕觸發IBAction爲方法,只調用parseXML如果定時器被nil;如果它實際上是nil和parseXML方法是要運行,啓動計時器,因此不會一小時再次運行:

- (IBAction)buttonPressed:(sender)id { 
    // If the parseTimer is active, do call parseXML. 
    // (And perhaps fire an alert here) 
    if (parseTimer != nil) return; 

    // Otherwise initialize the timer so that it calls the the method which 
    // will deactivate it in 60*60 seconds, i.e. one hour 
    parseTimer = [NSTimer scheduledTimerWithTimeInterval:60*60 target:self selector:@selector(reactivateButton) userInfo:nil repeats:YES]; 

    [self parseXML]; 
} 

deactivateParseTimer方法應禁用定時器,並將其設置爲nil這樣這parseXML可以再次運行:

- (void)deactivateParseTimer { 
    [parseTimer invalidate]; 
    parseTimer = nil; 
} 
+0

哇...工作很漂亮,但唯一的問題,如果我切換視圖,並支持它不顯示數據,我需要在這60秒使用緩存的數據... – user3271300

+0

如果您在計時器用完時表示60 * 60秒,則可以在切換視圖時取消激活計時器。 –

+0

等待......剛剛在你的方法中注意到這一行:[self performSelector:@selector(parseXML)withObject:self afterDelay:55.0];你想每55秒運行一次parseXML嗎?即使沒有按鈕按? –

2

只是在操作方法或任何你打電話來獲取XML setEnabled:NO並設置一個NSTimer來點燃從現在開始的3600秒的日期。 當它發生火災時,setEnabled:是

這可能是很好的創建一個像計數器的用戶的視覺指標。

相關問題