2012-12-28 9 views
8

नीचे वह फ़ंक्शन है जिसका उपयोग मैं फ़ीड के विभिन्न पृष्ठों को प्राप्त करने और पार्स करने के लिए कर रहा हूं।UITableView पहले से प्राप्त किए गए लोगों को रखते हुए अधिक पंक्तियां डालें

- (void)getFeed:(NSInteger) pageNumber 
{ 
    collectedData = [[NSMutableData alloc] init]; 
    NSString *urlStr =[NSString stringWithFormat:@"http://sitename.com/feed/?paged=%d", pageNumber]; 
    NSURL *url = [NSURL URLWithString:urlStr]; 
    NSURLRequest *req = [NSURLRequest requestWithURL:url]; 
    conn = [[NSURLConnection alloc] initWithRequest:req delegate:self startImmediately:YES]; 
} 

उपयोगकर्ता स्क्रॉल tableview के निचले भाग तक, मैं काउंटर incrementing द्वारा इतने पर फ़ीड के दूसरे पृष्ठ और उपयोग करने के लिए नीचे दिए गए समारोह का उपयोग करते हैं:

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView 
{ 
    float endScrolling = scrollView.contentOffset.y + scrollView.frame.size.height; 
    if (endScrolling >= scrollView.contentSize.height) 
    { 
     counter ++; 
     [self getFeed:counter]; 
    } 
} 

मुद्दा जब बजाय है पहले से प्राप्त किए गए आइटमों के नीचे इसे लोड करना, यह नया पृष्ठ आइटम दिखाने के लिए टेबलव्यू को पुनः लोड करता है और पुराने गायब हो जाते हैं। मैं अनंत स्क्रॉल करने के लिए मौजूदा लोगों के नीचे नए पेज आइटम लोड करना चाहता हूं। मैं उसे कैसे कर सकता हूँ?

उत्तर

2

यह अपने खुद के सवाल का जवाब देने बुरा लगता है, लेकिन एक और मंच से मदद ले रही है, मैं इस सवाल का जवाब यह पता लगाने में सक्षम था।

टेबलव्यू नियंत्रक म्यूटेबल सरणी के साथ सिंक में नहीं था, इसलिए मैंने एक और बनाया और दोनों सरणी जोड़ दी।

चरण 1: मैं एक संपत्ति

@property (nonatomic, readonly) NSMutableArray *moreItems; 
बनाया

चरण 2: बुला fetchEntries

moreItems = [[NSMutableArray alloc] init]; 

से पहले viewDidLoad में सरणी initialised चरण 3: connectionDidFinishLoading में, मैं पिछले सरणी के लिए नई सरणी 'moreItems' संलग्न 'आइटम'

[moreItems addObjectsFromArray:[channel items]]; 

चरण 4: n में डेटा स्रोत बदली गई से

return [[channel items] count]; 

नई सरणी

return [moreItems count]; 

के लिए और फिर cellForRowAtIndexPath में umberOfRowsInSection, नई सरणी

RSSItem *item = [moreItems objectAtIndex:[indexPath row]]; 
1

जब भी अपने सरणी एक नई वस्तु हो जाता है जोड़ा आप कॉल इस

-(void)insertRowInTableView 
{ 
    int row = [YourDataSourceArray count]; 
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:row inSection:0]; 
    NSArray *indexPaths = [NSArray arrayWithObject:indexPath]; 
    [YourTableView insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationTop]; 
} 

यहाँ YourDataSourceArray सरणी, जिनसे आप अपने tableview पंक्ति संख्या/डेटा सेट कर रहे हैं है। YourTableView आपकी तालिका दृश्य वस्तु नाम है।

+0

मैं जानता हूँ कि इस्तेमाल किया, लेकिन मैं कैसे इस समारोह – Jessica

+0

सिर्फ संपादित उपयोग करने के लिए पता नहीं है मेरा उत्तर – spider1983

+0

lemme इसे एक – Jessica

0

ऐसा इसलिए हो सकता है क्योंकि जब भी आप webservice से अपना डेटा प्राप्त कर रहे हैं तो आप इसे उस ऐरे में जोड़ रहे हैं जिसका उपयोग आप तालिका को पॉप्युलेट करने के लिए कर रहे हैं, इसके द्वारा आपके पास केवल नया डेटा होगा, आपको क्या करना है सरणी के लिए नए डेटा संलग्न करने के लिए (यह परिवर्त्य सरणी बनाने और संलग्न नए डेटा) और सिर्फ निम्न पंक्ति

[your_Table reloadData]; 

आशा यह आप में मदद मिलेगी का उपयोग करें।

+0

मैं पहले से ही ऐसा कर रहा हूं लेकिन यह मेरी समस्या का समाधान नहीं है। मुझे insertRowsAtIndexPaths का उपयोग करना है, लेकिन मुझे नहीं पता कि – Jessica

+0

कैसे आप चाहते हैं कि आपका नया डेटा विशिष्ट पंक्ति पर हो। – superGokuN

+0

पहले से प्राप्त पंक्तियों के अंत में – Jessica

1

आपको insertRowsAtIndexPaths: withRowAnimation:UITableView की विधि का उपयोग करना चाहिए।

एक बात आप का ख्याल रखना चाहिए कि जब आप इस विधि का उपयोग, संख्या पंक्तियों tableView:numberOfRowsInSection द्वारा लौटा बराबर number_of_existing_rows + number_of_newly_inserted_rows

0

के बजाय लोड करने के लिए नीचे स्क्रॉल का उपयोग कर के रूप में "tableview की अंतिम पंक्ति का उपयोग किया जाना चाहिए, बेहतर है अधिक आइटम लोड करें "और जब उपयोगकर्ता ने उस पंक्ति का चयन किया, तो नई फ़ीड प्राप्त करें और तालिकादृश्य पुनः लोड करें।

और यह भी मैं getfeed विधि में अपने कोड में एक संदेह, हर है, तो आप सरणी
collectedData बना रहे हैं। मुझे संदेह है कि आप डेटा डेटासोर्स डेटा में इस डेटा को जोड़ने में चूक गए हैं, जो आपको टेबलव्यू में केवल हाल ही में फ़ीड डेटा दिखा सकता है। कृपया

+0

स्क्रॉल से नीचे की बजाय tableviewfooter का उपयोग करके एक संभावना है। मुझे लगता है कि अभी मुझे मुख्य समस्या – Jessica

+0

नहीं पर ध्यान देना है, यह मास्टरडेंट टेम्पलेट से डिफ़ॉल्ट कोड है, यह शीर्ष – Jessica

+0

हाय पर पंक्तियां जोड़ता है, नीचे दिए गए कोड को देखें। सबसे पहले आपको डेटासोर्स में डेटा डालने और कॉल डालने की आवश्यकता है RowAtIndexPaths: withRowAnimation। –

1

अगले पृष्ठ के लिए नई फ़ीड पुनर्प्राप्त करने के बाद ऑब्जेक्ट को सरणी में प्राप्त करें। इन ऑब्जेक्ट्स को इस सरणी से अपने डेटा स्रोत सरणी में जोड़ें। अब तालिका में पंक्तियां सम्मिलित इस प्रकार है:

[yourTable beginUpdates]; 
[yourTable insertRowsAtIndexPaths:indexPathsToInsert 
       withRowAnimation:UITableViewRowAnimationBottom]; 
[yourTable endUpdates]; 

जहां "indexPathsToInsert" NSIndexPath वस्तुओं अपनी तालिका में अंतिम पंक्ति से शुरू करने और अपने नई वस्तुओं के लिए indexPaths containg की सरणी है।

उम्मीद है कि इससे मदद मिलती है।

1

हाय,

पाश के लिए एक बनाएँ, प्रारंभिक सूचकांक के साथ (डेटा स्रोत में वस्तुओं की संख्या) और वस्तुओं आप (संख्या) जोड़ना चाहते हैं की संख्या है, indexpaths की सरणी बना सकते हैं और फोन insertRowsAtIndexpaths: withRowAnimation।मुझे आशा है कि कोड आपकी मदद करेगा।

NSInteger statingIndex = [self.tableViewDatasource count]; 
    NSInteger noOfObjects = //Get the no.of objects count from getFeed method. 
    NSMutableArray *indexPaths = [[NSMutableArray alloc] init]; 

    for (NSInteger index = statingIndex; index < statingIndex+noOfObjects; index++) { 

     [_objects addObject:]; // add the object from getFeed method. 
     NSIndexPath *indexPath = [NSIndexPath indexPathForRow:index inSection:0]; 
     [indexPaths addObject:indexPath]; 
     [indexPath release]; 

    } 

    [self.tableView insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationFade]; 
+0

lemme यह भी जांचें – Jessica

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