From: Maxwell, A. R <ada...@pn...> - 2005-09-22 00:59:52
|
On Sep 21, 2005, at 17:38, Michael McCracken wrote: > > On Sep 21, 2005, at 5:27 PM, Maxwell, Adam R wrote: > >> I discovered an interesting problem while debugging Stefano's >> problem generating cite keys: >> >> For adding to the set of search results, NSSet compares using - >> hash and isEqual:; if all cite keys are identical, it will call >> isEqual for every one of them. >> >> - (BOOL)isEqual:(BibItem *)aBI{ >> return [[self >> bibTeXStringUnexpandedAndDeTeXifiedWithoutInternalFields] >> isEqualToString:[aBI >> bibTeXStringUnexpandedAndDeTeXifiedWithoutInternalFields]]; >> } >> >> With that comparison, these two items (I think) compared as >> equal! I think the problem is that @other types don't have any >> keys defined, so the actual strings being compared were "@other >> {FixMe}" and "@other{FixMe}". What should we do in this case? My >> thought is that if [knownKeys count] == 0, we probably ought to >> just include all of the keys. > > That sounds like the only way to get a meaningful comparison in > that case, so I'd agree with it... Also, if we're dropping keys, I think we should drop the ones from default fields also ([[OFPreferenceWrapper sharedPreferenceWrapper] stringArrayForKey:BDSKDefaultFieldsKey]), or else [knownKeys count] is never zero and my idea won't work. > > I'm a little confused, though - why are we comparing without > internal fields? Well, see our last discussion of this on May 13 2005 for background. I guess my thought was what Local-Url &co don't really affect the equality of the item; in other words, @article{myArticle, author = "me", title = "foo", Date-Modified = "some date" } isn't different from @article{myArticle, author = "me", title = "foo", Date-Modified = "some other date" } except for the Date-Modified, which is BibDesk metadata. > It seems like isEqual should compare the entire contents of the > item, but I guess if you told me we never actually need to do that, > I wouldn't be too shocked. I won't say that; it depends on the context in which you're using it, I guess. Adam |