2010-03-18 23 views
5

से छवियां प्राप्त करें मैं फ़ीड से नई आरएसएस कहानियां प्राप्त करने के लिए NSXMLParser का उपयोग कर रहा हूं और उन्हें UITableView में प्रदर्शित कर रहा हूं। हालांकि अब मैं केवल छवियों को लेना चाहता हूं, और उन्हें UIScrollView/UIImageView (3 छवियों के साथ-साथ) में प्रदर्शित करना चाहता हूं। मैं पूरी तरह से खो गया हूँ। मैं एक यूआरएल से 1 छवि प्राप्त करने के लिए निम्नलिखित कोड का उपयोग कर रहा हूं।आईफोन विकास: आरएसएस फ़ीड

NSURL *theUrl1=[NSURL URLWithString:@"http://farm3.static.flickr.com/2586/4072164719_0fa5695f59.jpg"]; 
JImage *photoImage1=[[JImage alloc] init]; 
[photoImage1 setContentMode:UIViewContentModeScaleAspectFill]; 
[photoImage1 setFrame:CGRectMake(0, 0, 320, 170)]; 
[photoImage1 initWithImageAtURL:theUrl1]; 
[imageView1 addSubview:photoImage1]; 
[photoImage1 release]; 

यह सब मैं पूरा किया है, और यह, काम करता है एक छवि के लिए, और मैं सही-सही URL निर्दिष्ट करना होगा। आप इसे पूरा करने के लिए क्या करेंगे?

उत्तर

0

ऐसा लगता है कि आपको पहले अपने XML दस्तावेज़ में छवियों की पहचान करने वाले xml टैग की पहचान करने की आवश्यकता है। आप ब्राउजर एड्रेस बार में जो भी एपीआई कॉल इस्तेमाल कर रहे हैं उसे टाइप करके ऐसा करने में सक्षम होना चाहिए।

एक बार जब आप ऐसा कर लेंगे तो आप nsxmlparser प्रतिनिधि विधि से छवि यूआरएल की एक सरणी बना सकते हैं जो नया डेटा प्राप्त करता है।

एक बार आप की सरणी है छवि यूआरएल के आप के लिए इसी तरह कुछ कर सकते हैं कि आप ऊपर सिवाय इसके कि आप प्रयोग करेंगे NSURL * theUrl1 = [myArray objectAtIndex कर रहे हैं: ...

आप छवियों बस से व्यवस्था कर सकते हैं उनके केंद्र स्थान को बदलना: image.center = CGPointMake (160,240) ..

उम्मीद है कि मदद करता है। nsxmlparser के लिए सेब दस्तावेज़ हैं।

+0

यूआरएल गतिशील हैं, क्योंकि मैं फीडबर्नर का उपयोग कर रहा हूं, यह "किसी भी" आरएसएस फ़ीड के साथ काम करेगा? धन्यवाद! –

+0

सुनिश्चित नहीं है कि 'यूआरएल गतिशील' से आपका क्या मतलब है। लेकिन यह किसी भी XML दस्तावेज़ के लिए काम करना चाहिए जब तक कि छवि यूआरएल की पहचान करने के लिए xml दस्तावेज़ में कोई टैग न हो। – Remover

+0

इसका मतलब है कि सभी छवियों को विभिन्न स्थानों की मेजबानी की जाती है ... –

0

आप एपीआई कॉल से डेटा लाने के दौरान शब्दकोश क्रियान्वयन का भी प्रयास कर सकते हैं। सबसे पहले आपको एक्सएमएल टैग की पहचान करना होगा जो एक्सएमएल दस्तावेज़ में छवियों की पहचान करता है, फिर आप प्रत्येक छवि को अपनी संबंधित कहानी के साथ एक शब्दकोश में छवि की कुंजी के रूप में असाइन कर सकते हैं। यह सुनिश्चित करेगा कि विशेष कहानी के लिए केवल इसकी संबंधित छवि प्रदर्शित की जाएगी। फिर आप इस जानकारी का उपयोग अपने आवेदन में बाद में कर सकते हैं क्योंकि आवश्यकता भिन्न होती है।

एनएसएमयूटेबल डिक्शनरी * mutDict = [[NSMutableDictionary allloc] init]; अगर ([elementName isEqualToString: @ "story_image"]) { [mutDict setObject: currentImage forKey: currentStory]; }

मैं आपको xml के बजाय JSON का उपयोग करने का सुझाव देना चाहता हूं क्योंकि यह हल्के डेटा-इंटरचेंज प्रारूप है। यह बहुत सारे स्वरूपण और प्रयास को भी बचाएगा।

+0

मैं जेएसओएन को एक कोशिश देने के लिए निश्चित रूप से खुला हूं, हालांकि मुझे कोई संकेत नहीं मिला कि यह कैसे करें। lol –

+0

आप इस पृष्ठ पर जा सकते हैं http://code.google.com/p/json-frame यह निश्चित रूप से आपकी सहायता करने जा रहा है। आपको केवल ढांचे को डाउनलोड करना होगा और फिर अपने आवेदन में उपयोग करना होगा। टीओ को लाइव डेटा प्राप्त करना है जो आपको XMLParsing NSString * jsonString = [NSString stringWithContentsOfURL: url एन्कोडिंग: NSUTF8StringEncoding त्रुटि: nil]; NSDictionary * JDict = [jsonString JSONValue]; या एनएसएआरएआरए * जेएआरआर = [जेसनस्ट्रिंग JSONValue]; आपके डेटाफीड के आधार पर । –

0

आप इस पृष्ठ http://code.google.com/p/json-frame

यह निश्चित रूप से मदद करने के लिए जा रहा है पर जा सकते हैं। आपको केवल ढांचे को डाउनलोड करना होगा और फिर अपने आवेदन में उपयोग करना होगा।
XMLParsing में लाइव डेटा आप एक ही बात करना है प्राप्त करने के लिए

NSString *jsonString = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil]; 


    NSDictionary *JDict = [jsonString JSONValue]; 

या

NSArray * JArr = [jsonString JSONValue]; 

क्या अपने डेटा फ़ीड शामिल पर निर्भर करता है।

+0

मैंने अपनी परियोजना में जेएसओएन फ्रेमवर्क जोड़ा है, हालांकि मुझे नहीं पता कि मैं आरएसएस फ़ीड से छवि खींचने के लिए क्या करूँगा ... किसी भी तरह से आप मुझे स्टैक ओवरफ्लो बिचौलियों को खत्म करने के लिए ईमेल कर सकते हैं? मेरा पता [email protected] धन्यवाद है –

0

मैं NSXMLParser का उपयोग कर रहा हूं और CoreData का उपयोग करके परिणामों को संग्रहीत कर रहा हूं। मैं अपने CoreData example कोड से Björn Sållarp की पार्सर कक्षा का एक संस्करण उपयोग करता हूं।

मेरी छवियां SQLite डेटाबेस में एनएसडीटा/बाइनरी के रूप में समाप्त होती हैं, लेकिन वे तत्काल प्रदर्शन के लिए यूआईएममेज की सरणी में भी शामिल हो सकते हैं।Parser.m से

एक्सट्रैक्ट करें: (ब्योर्न Sållarp से)

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 
{  

    if ([elementName isEqualToString:@"imagetag"]) 
    { 
     UIImage *newImage = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:currentString]]]; 

     NSData *imageData = UIImagePNGRepresentation(newImage); 

     [currentSearchResult setImage:imageData]; 

     currentString = nil; 
     return; 
    } 

साथ मेरे विचार से कहा जाता है:

NSString *searchURL = @"http://www.feedurl.com/feed/address/feed.xml"; 
NSURL *xmlURL = [NSURL URLWithString:searchURL]; 

Parser *xmlParse = [[Parser alloc] initWithContext:managedObjectContext]; 
[xmlParse parseXMLFileAtURL:xmlURL parseError:&parseError]; 

कि कोड मानती है कि आपके XML दस्तावेज़ टैग प्रारूप के साथ छवि URL शामिल हैं:

<imagetag>http://example.com/path/to/image.png</imagetag> 

भले ही आप कोरडाटा का उपयोग नहीं कर रहे हैं, तो उस लिंक पर उदाहरण के माध्यम से काम करना होगा NSXMLParser के साथ एक्सएमएल प्रोसेसिंग के लिए निर्देशक।

3

मेरे अन्य उत्तर के आगे, जो कुछ सहायक वर्गों का उपयोग करता है और थोड़े मानते हैं कि आप कोर डेटा के साथ सामान संग्रहित कर रहे हैं, यहां एक शुद्ध NSXMLParser तरीका है।

इस उदाहरण में मुझे लगता है कि आपके पास टैग के साथ तीन UIImageViews सेटअप हैं (100,101,102) ताकि हम उन्हें एक्सेस कर सकें। सबसे पहले, कोड है कि पार्सर शुरू होता है:

// Set the URL with the images, and escape it for creating NSURL 
    NSString *rssURLString = @"http://feeds.gettyimages.com/channels/RecentEditorialEntertainment.rss"; 
    NSString *escapedURL = [rssURLString stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding]; 
    NSURL *rssURL = [NSURL URLWithString:escapedURL]; 

    // rssParser is an NSXMLParser instance variable 
    if (rssParser) [rssParser release];  
    rssParser = [[NSXMLParser alloc] initWithContentsOfURL:rssURL]; 
    [rssParser setDelegate:self]; 
    success = [rssParser parse]; // return value not used 

इस बिंदु पर पार्स शुरू होता है और NSXMLParser यह प्रतिनिधि तरीकों के लिए कॉल बंद आग के रूप में यह एक्सएमएल में विभिन्न आरंभ और अंत तत्वों पाता होगा।

इस उदाहरण में मैं केवल didStartElement विधि लिख रहा हूँ:

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict 
{ 
    // look for an attribute called url 
    if ([attributeDict objectForKey:@"url"]) { 

     currentString = [attributeDict objectForKey:@"url"];   
     NSLog(@"Image URL: %@", currentString); 

     NSString* escapedURL = [currentString stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding]; 
     UIImage *image = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:escapedURL]]];   

     UIImageView * tmpImageView = (UIImageView*)[scrollView viewWithTag:100+imageCount]; 
     [tmpImageView setImage:image]; 

     NSLog(@"images found: %d", imageCount); 
     imageCount++;  
     if (imageCount>2) [rssParser abortParsing];  
    } 
} 

यहाँ हम देखने के लिए अगर attributeDict (एक NSDictionary वस्तु) एक यूआरएल विशेषता शामिल हैं। यदि ऐसा है, तो हम इसे वर्तमान स्ट्रिंग में ले जाते हैं और फिर इसे से बचते हैं, बस इसमें वर्ण होते हैं कि NSURL चालू हो जाएगा। फिर हम उस यूआरएल से एक छवि बनाते हैं और टैग नंबरों के आधार पर उपयुक्त UIImageView छवि सेट करते हैं। imageCount एक काउंटर है; एक बार हमने तीन छवियां की हैं, हम एनएसएक्सएमएल पार्सर को एक्सएमएल पार्सिंग को निरस्त करने के लिए कहते हैं।

अपने XML तत्व जैसे टैग के अंदर यूआरएल डालता है:

<image>http://example.com/image.jpg</image> 

आप didEndElement और foundCharacters साथ में कुछ अधिक परिश्रम करने की आवश्यकता होगी। काफी उत्कृष्ट Introduction to Event-Driven XML Programming Guide for Cocoa देखें।

मैंने इसे डेमो करने के लिए एक त्वरित और गंदे ऐप को एक साथ खटखटाया, आप इसे here पकड़ सकते हैं।

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