2010-09-24 20 views
32

मेरे पास कुछ कोड है जो दो एनएसआईएंडएक्सपैथ की तुलना करने और उनकी समानता या इसकी कमी (-इसक्वाल का उपयोग करके) के आधार पर अलग-अलग कोड निष्पादित करने पर निर्भर करता है। अधिकांश समय यह ठीक से काम करता है, लेकिन कभी-कभी ऐसा नहीं होता है। मैंने कोड निष्पादन के दौरान दो इंडेक्सपाथ का परीक्षण करने के लिए डीबगर कंसोल का उपयोग किया है, और वे मेरे समान दिखते हैं।isEqual हमेशा NSIndexPath के लिए काम नहीं करता है? मैं इसके स्थान पर क्या उपयोग कर सकता हूं?

- (BOOL)selectedStreetIsSameAsLastSelectedStreet 
{ 
    return [self.indexPathOfSelectedStreet isEqual:self.previousObject.indexPathOfSelectedStreet]; 
} 

यहाँ कोड के निष्पादन के दौरान उत्पादन है::

कोड यह

(gdb) po self.indexPathOfSelectedStreet 
<NSIndexPath 0x60a0770> 2 indexes [26, 1] 
(gdb) po self.previousObject.indexPathOfSelectedStreet 
<NSIndexPath 0x55b4f70> 2 indexes [26, 1] 
(gdb) p (BOOL)[self.indexPathOfSelectedStreet isEqual:self.previousObject.indexPathOfSelectedStreet] 
$2 = 0 '\000' 

मैं कुछ गलत कर रहा हूँ, या कोई और तरीका मैं मज़बूती की समानता का परीक्षण कर सकते है दो एनएसआईएंडएक्सपैथ?

उत्तर

63

iOS 5 के रूप में आप सिर्फ का उपयोग isEqual: (टिप्पणियों को देखने के)


[indexPath1 compare: indexPath2] == NSOrderedSame कोशिश कर सकते हैं।

शायद आपको NSIndexPath में एक बग मिला। यदि आप पहले से मौजूद पथ के साथ एक नया NSIndexPath बनाने का प्रयास करते हैं, तो आपको इसके बजाय इसे प्राप्त करना चाहिए। तो isEqual: शायद पॉइंटर्स की तुलना करता है न कि वास्तविक सूचकांक संग्रहीत।

+0

बिल्कुल सही। शीघ्र जवाब देने के लिए ध्न्यवाद! – JoBu1324

+2

मुझे लगता है कि यह एक बग भी हो सकता है। मुझे आईओएस 4.2 बी 3 में एक ही समस्या है। –

+0

मेरा मानना ​​है कि ऐसा इसलिए है क्योंकि '-इस एक्वाल:' सिर्फ दो इंडेक्स पथों की सूचक तुलना कर रहा है। –