2011-06-27 48 views
0

所以我有一個名爲ArtPiece的類,它定義了公共藝術品的幾個屬性,例如標題,描述等。我將ArtPiece對象存儲在appDelegate中的名爲mapAnnotations的數組中,因此它們將是全局的,並將它們作爲註釋放在地圖上。當地圖區域發生變化時,我會進行一次URL調用以獲取進入該地區的藝術作品的信息,從解析後的信息中創建artPiece對象,然後將它們添加到名爲「ArtsXMLParser」的類中的名爲items的數組中。我希望mapAnnotations能夠保存地圖上的所有藝術作品,但是當地區發生變化時,我只想添加來自mapAnnotations中尚未包含的「作品」的藝術作品,以免在地圖上添加重複的註釋。這是管理註釋的第三類中的方法。一切似乎都奏效,但if語句帶有containsObject:每次都會被調用,所以顯然這些artpieces永遠不會匹配,儘管當它們被記錄時它們具有相同的信息。有沒有更好的方法來查看兩個數組是否有一個具有完全相同屬性的對象?使用containsObject與來自不同文件的對象數組

-(void)requestFinished:(ASIHTTPRequest *)request{ 
    //NSLog(@"requestFinished:"); 

    //NSLog(@"%@", [request responseString]); 
    mainDelegate = (PublicArtAppDelegate*)[[UIApplication sharedApplication]delegate];  
    ArtsXMLParser *parser = [[ArtsXMLParser alloc] init]; 
    [parser parseXMLWithData:[request responseData] parseError:nil]; 
    newAnnots = [[NSMutableArray alloc] init]; 

    for (int xy = 0; xy<[parser items].count; xy++) 
    { 
     if (![mainDelegate.mapAnnotations containsObject:[[parser items]objectAtIndex:xy]]) 
     { 
      NSLog(@"%@", [[parser items]objectAtIndex:xy]); 
      [self.newAnnots addObject:[[parser items]objectAtIndex:xy]];    
      NSLog(@"%@", [newAnnots objectAtIndex:xy]); 
      [mainDelegate.mapAnnotations addObject:[[parser items]objectAtIndex:xy]]; 
      NSLog(@"%@", [mainDelegate.mapAnnotations objectAtIndex:xy]); 
     } 
    } 
    //mainDelegate.mapAnnotations = [parser items]; 
    [parser release]; 

    [self.mapView addAnnotations:self.newAnnots]; 
    [newAnnots removeAllObjects]; 
    //[mainDelegate.mapAnnotations addObject:newAnnots]; 
    [newAnnots release]; 
    if (mainDelegate.mapAnnotations==0) { 
     UIAlertView *alert2 = [[UIAlertView alloc] initWithTitle:nil message:@"No art work match your search term" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
     [alert2 show]; 
     [alert2 release]; 
    } 
} 

我很樂意澄清任何未解釋得很好的東西。謝謝你的幫助!

回答

1

在您的ArtPiece對象中,您需要繼承isEqual:方法的子類,以便在兩個artPieces相等時返回YES。此方法的默認實現只是比較單個對象的指針值,在您的情況下,這不是您想要的。

請參閱Apple的isEqual:方法的文檔,瞭解子類化時需要注意的一些細節。

+0

感謝您的反饋!所以在isEqual方法中,「receiver」是containsObject之前的對象,而「other」是之後的那個?我如何在該方法中引用接收器? – Ryan

+0

在'isEqual:'方法內,'self'指接收器。 – kubi

相關問題