NSIndexpath.item बनाम NSIndexpath.row


83

किसी NSIndexpath.rowऔर के बीच अंतर पता है NSIndexpath.item?

विशेष रूप से, मैं किसका उपयोग करता हूं:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;

2
हाँ, पंक्तियों rowद्वारा उपयोग किया जाता है UITableView; itemद्वारा किया जाता है UICollectionViewकोशिकाओं।
होलेक्स

जवाबों:


204

ठीक है, किसी ने भी यहां अच्छा जवाब नहीं दिया।

NSIndexPath के अंदर, अनुक्रमणिका को "_indexes" नामक एक साधारण सी सरणी में संग्रहीत किया जाता है जिसे NSUInteger * के रूप में परिभाषित किया गया है और सरणी की लंबाई "_length" में NSUInteger के रूप में परिभाषित की गई है। एक्सेसर "खंड" "_indexes [0]" का उपनाम है और दोनों "आइटम" और "पंक्ति" उपनाम "_indexes [1]" हैं। इस प्रकार दोनों कार्यात्मक रूप से समान हैं।

प्रोग्रामिंग शैली के संदर्भ में - और शायद परिभाषा श्रृंखला - आप तालिकाओं के संदर्भ में "पंक्ति", और संग्रह के संदर्भ में "आइटम" का उपयोग करना बेहतर होगा।


29
indexPath.row is best in your case 

NSIndexPath के बारे में पहली जानकारी

NSIndexPathवर्ग नेस्टेड सरणी संग्रह में से एक पेड़ में एक विशिष्ट नोड के लिए पथ का प्रतिनिधित्व करता है। इस पथ को अनुक्रमणिका पथ के रूप में जाना जाता है।

एक IndexPath में प्रत्येक सूचकांक पेड़ में एक नोड से दूसरे, गहरे नोड में बच्चों के एक सरणी में सूचकांक का प्रतिनिधित्व करता है।

उदाहरण के लिए , IndexPath 1.4.3.2 चित्र में दिखाए गए पथ को निर्दिष्ट करता है यहां छवि विवरण दर्ज करें

यहाँ आपके मामले indexPath.rowमें विशिष्ट पर पंक्ति का सूचकांक लौटाता है indexPath

बीच के भेद indexPath.row and indexPath.item

आम तौर indexPathपर दो गुण होते हैं

1 - पंक्ति

2 - आइटम

row - indexPath पर UITableViewविशिष्ट पंक्ति आधार पाने के लिए संपत्ति का उपयोग । यह भी केवल संपत्ति पढ़ी जाती है

 Available in iOS 2.0 and later.

आइटम - अनुभाग में आइटमUICollectionView प्राप्त करने के लिए ठीक से उपयोग करें । यह केवल पढ़ने के लिए संपत्ति है। इस संपत्ति का उपयोग करने के लिए आपको इसे UICollectionView.h में घोषित करना होगा

>     Available in iOS 6.0 and later.

आप सिर्फ NSIndexPath क्लास संदर्भ लिंक, y'know दे सकते थे?
ेश

25
शायद, लेकिन यह आमतौर पर उत्तर में प्रासंगिक भागों को शामिल करने की सलाह दी जाती है। यह देखते हुए कि अन्य उत्तरों ने एक उत्तर को बहुत संकीर्ण कर दिया है, मैं किसी ऐसे व्यक्ति की सराहना करता हूं जो इसके व्यापक उपयोग की ओर इशारा करता है NSIndexPath
रोब

6
मुझे अभी भी indexPath.item का कोई उल्लेख नहीं दिखाई दे रहा है, जबकि एक प्रश्न जो पूछ रहा था वह था indexPath.item और indexPath.row के बीच का अंतर। मिधुन सांसद का जवाब है। बस कॉपी-पेस्ट करने वाले दस्तावेज़ में विस्तार की कुछ मात्रा के बिना बहुत मदद नहीं मिलती है।
ेश

10

आपको उपयोग करने की आवश्यकता है indexPath.row

अंतर यह है कि:

indexPath.row tableView के लिए है और indexPath.item संग्रह दृश्य के लिए है

मद

एक इंडेक्स नंबर एक संग्रह दृश्य के एक खंड में एक आइटम की पहचान। (सिफ़ पढ़िये)@property (nonatomic, readonly) NSInteger item;

विचार-विमर्श

आइटम जिस अनुभाग में है, उसे अनुभाग के मान से पहचाना जाता है। उपलब्धता

Available in iOS 6.0 and later.

UICollectionView.h में घोषित किया गया


पंक्ति

एक सूचकांक संख्या एक तालिका दृश्य के एक खंड में एक पंक्ति की पहचान। (सिफ़ पढ़िये)@property(nonatomic, readonly) NSInteger row;

विचार-विमर्श

जिस अनुभाग में पंक्ति है, उसे अनुभाग के मान से पहचाना जाता है। उपलब्धता

Available in iOS 2.0 and later.

कृपया विवरण के लिए NSIndexPath परिवर्धन की जाँच करें


4

@ ओवेन गॉडफ्रे का जवाब @iPatel के स्वीकृत जवाब से बेहतर है। यहाँ कुछ और स्पष्टीकरण दिए गए हैं, जो मैं उनके उत्तर पर टिप्पणी करने में सक्षम नहीं था, इसलिए मैं उनके उत्तर की प्रतिलिपि बनाकर यहाँ जोड़ दूंगा। श्रेय ओवेन का है।


@ ओवेन गॉडफ्रे से:

NSIndexPath के अंदर, अनुक्रमणिका को "_indexes" नामक एक साधारण सी सरणी में संग्रहीत किया जाता है जिसे NSUInteger * के रूप में परिभाषित किया गया है और सरणी की लंबाई "_length" में NSUInteger के रूप में परिभाषित की गई है। एक्सेसर "खंड" "_indexes [0]" के लिए एक उपनाम है और दोनों "आइटम" और "पंक्ति" उपनाम "_indexes 1 " के लिए हैं। इस प्रकार दोनों कार्यात्मक रूप से समान हैं।

प्रोग्रामिंग शैली के संदर्भ में - और शायद परिभाषा श्रृंखला - आप तालिकाओं के संदर्भ में "पंक्ति", और संग्रह के संदर्भ में "आइटम" का उपयोग करना बेहतर होगा।


NSIndexPath का मुख्य इंटरफ़ेस NSIndexPath.h में परिभाषित किया गया है। इंडेक्स का संग्रहण _indexes में है जो NSUInteger का एक निजी एक आयामी सरणी है। NSIndexPath अपने आप में कई आयामों का प्रतिनिधित्व कर सकता है। NSIndexPath पर दो प्रासंगिक श्रेणियां हैं जो कार्यक्षमता का विस्तार करती हैं, एक UICollectionView.h "NSIndexPath (UICollectionViewAdditions)" और एक UITableView.h "NSIndexPath (UITableView)" से। UICollectionView.h से एक आसानी से संपत्ति "आइटम" और संबंधित सुविधा विधियों को जोड़ता है। UITableView.h से एक आसानी से संपत्ति "पंक्ति" और संबंधित सुविधा विधियों को जोड़ता है। हालाँकि दोनों गुण केवल रैपर हैं जो _indexes [1] में अंतर्निहित मूल्य तक पहुँचते हैं।

चूंकि UIKit दोनों श्रेणियों के साथ लिंक करता है, सुविधा कार्यों के दोनों सेट हमेशा उपलब्ध होते हैं, कोई फर्क नहीं पड़ता कि IOS में आप उनका उपयोग कहां कर रहे हैं। इसलिए आप [NSIndexPath IndexPathForRow: inSection:] से एक NSIndexPath बना सकते हैं, लेकिन indexPath.item से दूसरा इंडेक्स प्राप्त करते हैं। अंतर्निहित मान बिल्कुल वैसा ही है, जैसे indexPath.item या indexPath.row द्वारा एक्सेस किया गया है।

यदि आप UICollectionView के साथ "आइटम" का उपयोग करते हैं और UITableView के साथ "पंक्ति" का उपयोग करते हैं, तो यह क्लीनर है, जैसा कि उनका उपयोग करने का इरादा था, और यह अधिक पठनीय कोड के लिए बनाता है। हालाँकि, यदि आप उन्हें इंटरचेंज करते हैं तो आपका प्रोग्राम क्रैश नहीं होगा।

संदर्भ: NSIndexPath


0

UICollectionView.h के नीचे देखें और आपको वह श्रेणी दिखाई देगी जो itemUSIollectionView उदाहरणों के लिए उपयोग किए जाने पर एक संपत्ति के रूप में जोड़ने के लिए NSIndexPath का विस्तार करती है ।

UITableView.h के तल पर एक समान अनुभाग है जो NSIndexPaths के लिए जोड़ता है rowऔर sectionगुण जो UITableViews में उपयोग किए जाते हैं।

यदि आप एक वर्ग के भीतर NSIndexPath उदाहरण के इन गुणों को एक्सेस करने का प्रयास कर रहे हैं और NSIndexPathInstance को विश्वास नहीं है कि वे वहां हैं, तो उस वर्ग के शीर्ष लेख को आयात करें जो उन्हें आपकी कक्षा के शीर्ष में परिभाषित करता है और आप जादुई रूप से उपयोग करने में सक्षम होंगे इन गुणों।

UICollectionView.h

@interface NSIndexPath (UICollectionViewAdditions)

+ (instancetype)indexPathForItem:(NSInteger)item inSection:(NSInteger)section NS_AVAILABLE_IOS(6_0);

@property (nonatomic, readonly) NSInteger item NS_AVAILABLE_IOS(6_0);

@end

UITableView.h

//_______________________________________________________________________________________________________________

// This category provides convenience methods to make it easier to use an NSIndexPath to represent a section and row
@interface NSIndexPath (UITableView)

+ (instancetype)indexPathForRow:(NSInteger)row inSection:(NSInteger)section;

@property (nonatomic, readonly) NSInteger section;
@property (nonatomic, readonly) NSInteger row;

@end

अपनी कक्षा के भीतर इन गुणों का उपयोग करने के लिए आपको अपनी कक्षा में वांछित को आयात करना होगा जैसे:

@import "UIKit/UITableView.h"

और फिर आप जैसे काम कर सकते हैं: myIndexPath.rowऔर[myIndexPath row]

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.