2013-02-13 185 views
0

我在計算遞歸操作時遇到了問題。我正在創建一個站點地圖生成器,我想要統計每個URL鏈接的次數。到目前爲止,我在計算兩個以上時遇到了問題!但至少它根本不重要。遞歸計數

這裏是我的代碼:

- (void)parseURL:(NSURL*)URL 
{ 
    NSLog(@"Parsing URL: %@", URL); 
    // Check for URL in visited Array 
    if ([self.visitedURLs containsObject:URL]) { 

     NSLog(@"URL Already Visited..."); 

     // Add 1 to the count of links to this URL 
     [[self.collectedURLs objectForKey:[URL absoluteString]] addToIncomingLinks]; 

     NSLog(@"Updating Link Count... (%d)", [[self.collectedURLs objectForKey:[URL absoluteString]] incomingLinks]); 

     // Done parsing this URL, nothing else to do here... 

    } else { 

     ... Filter URLs and other stuff ... 

     // Add URL as visited 
     [self.visitedURLs addObject:URL]; 

     // Add filtered URL to Dictionary with link count of 1 
     [self.collectedURLs setObject:[[OBAURLData alloc] init] forKey:workingURL]; 

     // Reload Table 
     [self.crawlTableView reloadData]; 

     // parse found URLs 
     [self parseURL:[NSURL URLWithString:workingURL]]; 
    } 
} 

// From the OBAURLData Object 
- (id)init 
{ 
    if ((self = [super init])) { 
     self.incomingLinks = 1; 
    } 
    return self; 
} 
- (void)addToIncomingLinks 
{ 
    self.incomingLinks = self.incomingLinks + 1; 
} 

的所有代碼如預期,除了計數也不能高於2即使NSLog的報表都顯示爲已訪問兩次以上的URL的作品。

難道這是因爲遞歸還是我只是沒有看到我的問題?

回答

0

你的else塊中的URL和workingURL有什麼不同,也許你正在爲每個URL重新創建一個OBAURLData實例,即使它相同?

我會打印出您創建OBAURLData對象的次數。

+0

謝謝肖恩,我完全錯過了。每次找到URL都會替換字典中的鍵/值對。在添加密鑰之前添加密鑰檢查之後,我得到了我期望的結果。我甚至不把它看作是一個可能的問題。 – Chris 2013-02-13 23:29:52

+0

不用擔心克里斯高興你解決了你的問題:) – Shaun 2013-02-14 01:36:50