2012-07-23 49 views
0

每當我在一個類中創建一個NSURLConnection時,它總是連接到該類所連接的第一個URL。它有伊娃conn的NSURLConnection的存儲在,這裏是連接方法:NSURLConnection始終連接到相同的URL

-(void)getMoreProblems 
{ 
    problemsPage++; 
    NSURL *url=[NSURL URLWithString:[NSString stringWithFormat:@"http://projecteuler.net/problems;page=%d",problemsPage]]; 
    NSURLRequest *req=[NSURLRequest requestWithURL:url]; 
    NSLog(@"%p",conn); 
    conn=[[NSURLConnection alloc] initWithRequest:req delegate:self]; 
    NSLog(@"%p",conn); 
} 

我已經NSLog檢查荷蘭國際集團的URL的描述和連接的指針,他們是不同的,以及告訴UIApplication在Safari中加載網址。據我所知,它試圖加載正確的頁面。我也試過POST和GET,但沒有什麼區別。什麼可能導致這種情況?

編輯任何人都希望在這個類似的問題:

我的問題結束了,我沒有重新初始化我存儲在加載每一頁後的連接數據NSMutableData

+0

它總是連接到第1頁,即使problemsPage == 2,除非我在開​​始時將問題頁面設置爲其他內容,在這種情況下,它始終連接到該頁面。 – 2012-07-23 20:41:32

+0

那麼'url'肯定會更新到page = 2呢?如果你在NSURLRequest被創建之前正確地記錄它,你是否接收到來自第一個NSURLConnection的'didFinish ...'委託調用? – 2012-07-23 20:44:55

+0

您確定之前的連接已經完成,然後再開始下一步 - 您如何區分?你對完成的請求做什麼? – ChrisH 2012-07-23 20:45:17

回答

0

這不是一個真正的答案,但它太長的評論。我無法看到您發佈的代碼有任何問題。我將getMoreProblems的代碼粘貼到一個新項目中,並添加了查看結果所需的委託方法 - 據我所知,它工作正常。我可以在結果字符串中看到問題編號從第一頁(從第一次調用getMoreProblems)開始,並從第二次調用getMoreProblems時的問題51開始。我添加到getMoreProblems方法中的唯一東西是最後的if-else子句。下面是我使用的代碼:

@synthesize window = _window,receivedData; 

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { 
    problemsPage = 0; 
    [self getMoreProblems]; 
} 


-(void)getMoreProblems { 
    problemsPage++; 
    NSURL *url=[NSURL URLWithString:[NSString stringWithFormat:@"http://projecteuler.net/problems;page=%d",problemsPage]]; 
    NSURLRequest *req=[NSURLRequest requestWithURL:url]; 
    NSLog(@"%p",conn); 
    conn=[[NSURLConnection alloc] initWithRequest:req delegate:self]; 
    NSLog(@"%p",conn); 
    if (conn) { 
     self.receivedData = [NSMutableData data]; 
    } else { 
     NSLog(@"The Connection Failed"); 
    } 
} 

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { 
    NSLog(@"%@",response.URL); 
    [self.receivedData setLength:0]; 
} 

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { 
    NSLog(@"In connection:didReceiveData:"); 
    [self.receivedData appendData:data]; 
} 



- (void)connectionDidFinishLoading:(NSURLConnection *)connection { 
    NSLog(@"Succeeded! Received %lu bytes of data",[receivedData length]); 
    NSString *page = [[NSString alloc] initWithData:self.receivedData encoding:NSUTF8StringEncoding]; 
    NSLog(@"%@",page); 
    [self performSelector:@selector(getMoreProblems) withObject:nil afterDelay:5]; 
} 

所以,我無法重現你的問題 - 我猜它在其他地方的一些代碼,你沒有張貼。

+0

我發現問題 - 它在該方法之外;我正在使用NSMutableData存儲NSURLConnection中的數據,並且在創建新連接時沒有重置或重新創建它。 – 2012-07-24 01:34:49