2011-04-12 14 views
14

date1 == date2 तुलना करने के लिए वैध तरीका नहीं है? यदि नहीं, तो सही विकल्प क्या है?उसी तारीख/समय के लिए दो एनएसडीएटी की तुलना करें

- (NSDate*) dateWithNoTime { 
    unsigned int flags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit; 
    NSCalendar* calendar = [NSCalendar currentCalendar]; 
    NSDateComponents* components = [calendar components:flags fromDate:self]; 
    NSDate* dateOnly = [calendar dateFromComponents:components]; 
    return dateOnly; 
} 

- (BOOL) sameDayAsDate:(NSDate*)dateToCompare { 
    NSDate *date1 = [self dateWithNoTime]; 
    NSDate *date2 = [dateToCompare dateWithNoTime]; 
    return date1 == date2;  // HERE IS WHERE THINGS SEEM TO FAIL 

} 

उत्तर

42

आप दो सूचक मूल्यों की तुलना कर रहे:

यहाँ मेरी कोड है। (यह सी अर्थ ले जाएगा, संकेत की तुलना)

return ([date1 compare:date2] == NSOrderedSame); 
+0

इसे 'isEqual:' द्वारा नहीं कहा जाता है? –

4

आप ऑब्जेक्टिव-सी में == उपयोग नहीं कर सकते वस्तु समानता तुलना करने के लिए: आप की तरह NSDate तुलना विधि का उपयोग करने की जरूरत है। अन्य भाषाओं की तरह, आप ऑब्जेक्ट पॉइंटर्स की तुलना कर रहे हैं।

संदेश आप चाहते हैं सी भाषा (ऑब्जेक्टिव-सी है, जिनमें से एक सुपरसेट) में के रूप में isEqualToDate: है, उर्फ ​​[date1 isEqualToDate:date2]

+3

"आप उद्देश्य-सी में कभी भी' ==' का उपयोग नहीं कर सकते "थोड़ा कठोर है। बेशक आप इसका उपयोग कर सकते हैं, सिर्फ ग्रेग के बारे में पूछने के उद्देश्य से नहीं। हां, आपने जो लिखा है वह सही है, लेकिन शब्द अजीब है। –

+0

isEqualToDate सटीक समानता की जांच करता है, इसलिए यह शायद कभी भी सच नहीं होगा। – jdog

8

, == (समानता) ऑपरेटर दो सूचक मान तुलना अगर वे बराबर हैं देखने के लिए (यानी यदि दो चर एक ही वस्तु को पकड़ते हैं)। हालांकि यह आदिम मूल्यों की तुलना में काम करता है (int एस, char एस, bool एस), यह उद्देश्य-सी ऑब्जेक्ट्स पर काम नहीं करता है, जो सामग्री में बराबर हो सकता है, लेकिन स्मृति स्थान में भिन्न होता है (जो समानता ऑपरेटर की तुलना करता है)।

अगर दो वस्तुओं के बराबर हैं जाँच करने के लिए, NSObject एक -isEqual: विधि है जो आप एक सामान्य बयान (जैसे [date1 isEqual:date2]) के रूप में उपयोग कर सकते हैं प्रदान करता है, और कुछ वर्गों ऐसे -isEqualToDate:NSDate रों तुलना करने के लिए प्रयोग किया जाता है के रूप में, एक अधिक विशिष्ट तुलना विधि की पेशकश करने के लिए चुन , या -isEqualToString:NSString से तुलना करने के लिए उपयोग किया जाता है। इन विधियों का उपयोग आदिम प्रकारों (उदाहरण के लिए, int एस) की तुलना करने के लिए नहीं किया जा सकता है क्योंकि वे ऑब्जेक्ट्स नहीं हैं, लेकिन लगभग सभी ऑब्जेक्ट्स पर काम करेंगे।

संबंधित मुद्दे