ios Cvičení RSS čtečka



Podobné dokumenty
Knihovna Foundation. Seminář ios Martin Hrubý, FIT VUT v Brně

Java a XML. 10/26/09 1/7 Java a XML

CloudKit I. (zatím ne zcela dořešené koncepty použití) Martin Hrubý Seminář ios, FIT VUT v Brně

Uživatelské rozhraní v ios. Martin Hrubý FIT VUT v Brně

Distribuované systémy a výpočty

Jak importovat profily do Cura (Windows a

Webové služby a XML. Obsah přednášky. Co jsou to webové služby. Co jsou to webové služby. Webové služby a XML

Michal Podzimek

Čipové karty Lekařská informatika

Návrh a realizace aplikace Atlas hub na platformě iphone

GUIDELINES FOR CONNECTION TO FTP SERVER TO TRANSFER PRINTING DATA

Implementace hry Shannon switching game pro ios

Rozhraní SAX, SAX vs. SAX2. Jaroslav Ciml

20. Projekt Domácí mediotéka

Začínáme s vývojem pro Android

Současné trendy vývoje aplikací pro platformu ios

Revit link. Propojení mezi Scia Engineer a Revit structure

Code Contracts. Robert Haken [MVP ASP.NET, MCT] Software architect, Owner at HAVIT, s.r.o. knowledge-base.havit.cz

CZ.1.07/1.5.00/

Bankovní aplikace.... a jejich bezpečnost. Petr Dvořák, Partner & ios Development

1. Téma 12 - Textové soubory a výjimky

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo

Nástroje na vývoj aplikací pro ios Trocha motivace na úvod Co budete potřebovat Co když nemáte k dispozici počítač s macos? Vývojové prostředí Xcode

Doxygen. Jakub Břečka

Pokročilé Webové služby a Caché security. Š. Havlíček

X36DSV 3. cvičení. XML (extensible Markup Language) JavaScript. AJAX (Asynchronous JavaScript and XML) X36DSV. 2007/10 ver.2.0 1

WYSIWYG EDITOR PRO XML FORM

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

RMI Remote Method Invocation

KIV/PIA 2013 Jan Tichava

(c) Miroslav Balík, Ondřej Kroupa, Martin Pelant 11/29/ přednáška. Android projekt. Manifest. Activity. Uživatelské rozhraní (základy)

Databáze ROMARIN (WIPO)

The Lightweight Directory Access Protocol version 3 (LDAPv3) is specified by this set of eleven RFCs:

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Rozhraní pro práci s XML dokumenty. Roman Malo

Připravil: Ing. Jiří Lýsek, Ph.D. Verze: Webové aplikace

Java Cvičení 05. CHARLES UNIVERSITY IN PRAGUE faculty of mathematics and physics

Nová éra diskových polí IBM Enterprise diskové pole s nízkým TCO! Simon Podepřel, Storage Sales

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Python profesionálně: dynamické parametry, generátory, lambda funkce... with. Dynamické parametry

CAD library. Spuštění aplikace. Práce s aplikací. Popis okna

Čtečka otisků prstů 1. POPIS 2. SPECIFIKACE. ECLIPSERA s.r.o. Distributor pro ČR. VÝROBNÍ ČÍSLO

Úvod do programovacích jazyků (Java)

Semestrální práce z předmětu. Jan Bařtipán / A03043 bartipan@studentes.zcu.cz

NAS 323 NAS jako VPN Server

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

[APLIKACE PRO PŘEHRÁVÁNÍ VIDEA - PROJEKT MIAMI]

Vánoční sety Christmas sets

Obsah přednášky. programovacího jazyka. Motivace. Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup Kontinuace Program

Apache Cordova (PhoneGap 3)

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 3.4.

Vývoj Internetových Aplikací

Škola: Střední škola obchodní, České Budějovice, Husova 9. Inovace a zkvalitnění výuky prostřednictvím ICT

Kolekce, cyklus foreach

Budte chytří při vytváření aplikací

X33EJA Web Services. Martin Ptáček, KOMIX s.r.o.

DSL manuál. Ing. Jan Hranáč. 27. října V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v

Postup objednávky Microsoft Action Pack Subscription

Vytvoření pokročilé Fotogalerie v Drupalu - Views

RDF API a SPARQL syntaxe, API, příklady. 4IZ440 Reprezentace a zpracování znalostí na WWW Josef Petrák me@jspetrak.name

Uživatelská příručka. Xperia P TV Dock DK21

Ukázka knihy z internetového knihkupectví

Trendy v budování datových center v roce Praha,

Plánování a vývoj základního frameworku

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Introduction to MS Dynamics NAV

NUR - Prototyping. Low Fidelity

Západočeská univerzita v Plzni Fakulta aplikovaných věd Katedra informatiky a výpočetní techniky. Interaktivní informační aplikace.

GUI. Systémová integrace pro desktopové aplikace

Webové služby a XML. Miroslav Beneš

Jaku b Su ch ý 1

CMS LARS VIVO VERZE 1.2 Z POHLEDU VIVOJÁŘE

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

Datové typy v Javě. Tomáš Pitner, upravil Marek Šabo

WCF RIA Services. aneb jak na RIA aplikace v Silverlightu

RESTful API TAMZ 1. Cvičení 11

Semestrální práce z DAS2 a WWW

Digitální učební materiál

Ember.js. Jan Kopřiva, Vojtěch Jasný

Sociální sítě jako Velký bratr. Martin Klubal AEC a.s.

JavaServer Faces Zdeněk Troníček

Úvod do datového a procesního modelování pomocí CASE Erwin a BPwin

18. února 2015, Brno Připravil: David Procházka. Programovací jazyk C++

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

Mobilní malware na platformě Android Přednáška 2. Ing. Milan Oulehla

Evoluce deploye Od FTP po automatický deploy

MASARYKOVA UNIVERZITA FAKULTA INFORMATIKY. SkautIS pro ios BAKALÁŘSKÁ PRÁCE. Michal Šimík

UJO Framework. revoluční architektura beans. verze

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

CZ EN SK U-Smart. WiFi Plug Mini

[ASP].NET Core Demystified. Miroslav Holec. Konzultant a lektor [ASP].NET Core.

Matlab-To-Can Toolbox

IRAE 07/08 Přednáška č. 7. Začátek (head)

Příkazové skripty Procedurální jazyky Lua a ostatní

Microsoft Lync WEB meeting

Gymnázium, Brno, Elgartova 3

Vývoj multiplatformní aplikace v Qt

Gymnázium, Brno, Elgartova 3

Mid Android M001, M002, M003

První kapitola úvod do problematiky

Transkript:

strana 1 ios Cvičení RSS čtečka Jiří Kamínek Kaminek.jiri@stoneapp.com

strana 2 Vytvoření nového projektu v XCode Název RSSLesson Navigation-based Application use Core Data for storage nezaškrtávat

strana 3 Vytvoření modelu <?xml version="1.0" encoding="utf-8"?> <rss version="2.0"> <channel> <title>živě.cz</title> <link>http://www.zive.cz/default.aspx</link> <description> </description> <language>cs</language> <pubdate>mon, 7 Mar 2011 20:00:00 GMT</pubDate> <image> <title>živě.cz</title> <url>http://www.zive.cz/client.images/logos/logo-zive-rss.gif</url> <link>http://www.zive.cz/default.aspx</link> </image> <item> <title>western Digital zaplatí 4,3 miliardy dolarů za výrobu disků Hitachi</title> <link>http://www.zive.cz/bleskovky/western-digital-zaplati-43-miliardy-dolaru-za-vyrobu-disku-hitachi/sc-4-a-156126/default.aspx</link> <guid>http://www.zive.cz/default.aspx?article=156126</guid> <description> Mezi výrobci pevných disků dojde k důležitému spojení sil. Světová dvojka Western Digital koupí divizi pevných disků společnosti Hitachi, uvedl to Western Digital v dnešní tiskové zprávě. Koupě vyjde na 4,3 miliardy dolarů a měla by z Western Digital udělat největšího výrobce pevných disků a...</description> <pubdate>mon, 7 Mar 2011 17:01:00 GMT</pubDate> </item> </chanel> </rss>

strana 4 Vytvoření modelu <item> <title>western Digital zaplatí 4,3 miliardy dolarů za výrobu disků Hitachi</title> <link>http://www.zive.cz/bleskovky/western-digital-zaplati-43- miliardy-dolaru-za-vyrobu-disku-hitachi/sc-4-a-156126/default.aspx</ link> <description> Mezi výrobci pevných disků dojde k důležitému spojení sil. Světová dvojka Western Digital koupí divizi pevných disků společnosti Hitachi, uvedl to Western Digital v dnešní tiskové zprávě. Koupě vyjde na 4,3 miliardy dolarů a měla by z Western Digital udělat největšího výrobce pevných disků a...</description> <pubdate>mon, 7 Mar 2011 17:01:00 GMT</pubDate> </item>

strana 5 XML parser SAX Simple API for XML DOM Document Object Model

strana 6 RSSProcessor.h Protokol <NSXMLParserDelegate> - (void) parserssfeedaturl:(nsstring*)urladdress;

strana 7 RSSProcessor.h id delegate; NSXMLParser * rssparser; NSMutableArray * stories; NSMutableDictionary * item; NSString * currentelement; NSMutableString * currenttitle, * currentdate, * currentsummary, * currentlink;

strana 8 RSSProcessor.m - (id) init { } if (self = [super init]) { stories = [[NSMutableArray alloc] init]; } return self;

strana 9 RSSProcessor.m - (void)dealloc { } [stories release]; [super dealloc];

strana 10 RSSProcessor.m - (void) parserssfeedaturl:(nsstring*)urladdress; { //you must then convert the path to a proper NSURL or it won't work NSURL *xmlurl = [NSURL URLWithString:urlAddress]; rssparser = [[NSXMLParser alloc] initwithcontentsofurl:xmlurl]; // Set self as the delegate of the parser so that it will receive the parser delegate methods callbacks. [rssparser setdelegate:self]; } [rssparser parse];

strana 11 RSSProcessor.m - (void)parser:(nsxmlparser *)parser parseerroroccurred: (NSError *)parseerror { } NSLog(@"error parsing XML");

strana 12 RSSProcessor.m - (void)parser:(nsxmlparser *)parser didstartelement:(nsstring *)elementname namespaceuri:(nsstring *)namespaceuri qualifiedname:(nsstring *) qname attributes:(nsdictionary *)attributedict{ currentelement = [elementname copy]; } if ([elementname isequaltostring:@"item"]) { } // clear out our story item caches... item = [[NSMutableDictionary alloc] init]; currenttitle = [[NSMutableString alloc] init]; currentdate = [[NSMutableString alloc] init]; currentsummary = [[NSMutableString alloc] init]; currentlink = [[NSMutableString alloc] init];

strana 13 RSSProcessor.m - (void)parser:(nsxmlparser *)parser didendelement:(nsstring *)elementname namespaceuri:(nsstring *)namespaceuri qualifiedname:(nsstring *) qname{ if ([elementname isequaltostring:@"item"]) { // save values to an item, then store that item into the array... [item setobject:currenttitle forkey:@"title"]; [item setobject:currentlink forkey:@"link"]; [item setobject:currentsummary forkey:@"summary"]; [item setobject:currentdate forkey:@"date"]; } } [stories addobject:[item copy]]; NSLog(@"adding story: %@", currenttitle);

strana 14 RSSProcessor.m - (void)parser:(nsxmlparser *)parser foundcharacters:(nsstring *)string{ // save the characters for the current item... } if ([currentelement isequaltostring:@"title"]) { [currenttitle appendstring:string]; } else if ([currentelement isequaltostring:@"link"]) { [currentlink appendstring:string]; } else if ([currentelement isequaltostring:@"description"]) { [currentsummary appendstring:string]; } else if ([currentelement isequaltostring:@"pubdate"]) { } [currentdate appendstring:string];

strana 15 RSSProcessor.m - (void)parserdidenddocument:(nsxmlparser *) parser { NSLog(@"all done!"); } [delegate setitems:stories]; [[_delegate tableview] reloaddata];

strana 16 Zobrazení výsledku

strana 17 MainWindow.xib Nadpis RSS Lesson

strana 18 RootViewController.xib UITableView

strana 19 RootViewController.h NSArray *items; @property (nonatomic, copy) NSArray *items;

strana 20 RootViewController.m @synthesize items;

strana 21 RootViewController.m - (NSInteger)tableView:(UITableView *) tableview numberofrowsinsection: (NSInteger)section return [items count];

strana 22 RootViewController.m - (UITableViewCell *)tableview:(uitableview *) tableview cellforrowatindexpath:(nsindexpath *) indexpath [cell.textlabel settext:[[items objectatindex:indexpath.row] valueforkey:@"title"]];

strana 23 RootViewController.m - (void)viewdidload items = nil; RSSProcessor *rssprocessor = [[[RSSProcessor alloc] initwithdelegate:self] autorelease]; [rssprocessor parserssfeedaturl:@"http:// www.zive.cz/system/rss.xml"]; //#import "RSSPRocessor.h"

strana 24 Protokol Lepší řešení Model musí mít znalost controlleru

strana 25 ItemProtocol.h @protocol ItemProtocol - (void) updateitemsource:(nsarray*)itemarray; @end

strana 26 RSSProcessor.h #import "ItemProtocol.h" id <ItemProtocol> delegate; @property (retain) id <ItemProtocol> delegate; //@synthesize

strana 27 RootViewController.h #import "ItemProtocol.h" @interface RootViewController : UITableViewController <ItemProtocol>

strana 28 RSSProcessor.m - (void)parserdidenddocument:(nsxmlparser *) parser { NSLog(@"all done!"); } [delegate updateitemsource:stories];

strana 29 RootViewController - (void) updateitemsource:(nsarray*)itemarray { } [self setitems:itemarray]; [[self tableview] reloaddata];

strana 30 Zobrazení detailu? Přejdeme na web

strana 31 Přidáme nový View Classes -> Add -> New file Cocoa Touch Class With XIB for user interface WebController.h

strana 32 WebController.h Protokol <UIWebViewDelegate> IBOutlet UIWebView *_webview; NSString *urladdress; @property (nonatomic, copy) NSString *urladdress;

strana 33 WebController.m @synthesize urladdress;

strana 34 WebController.m - (void)viewdidload self.title = @"Web";

strana 35 WebController.m - (void)viewwillappear:(bool)animated{ NSURL *url = [NSURL URLWithString:[urlAddress stringbyreplacingoccurrencesofstring:@" " withstring:@""]]; NSURLRequest *request = [NSURLRequest requestwithurl:url]; [_webview loadrequest:request]; } [_webview setdelegate:self]; [_webview loadrequest:request];

strana 36 WebController.m - (void)viewwilldisappear:(bool)animated{ NSURL *url = [NSURL URLWithString:@"about:blank"]; } NSURLRequest *request = [NSURLRequest requestwithurl:url]; [_webview loadrequest:request];

strana 37 Zobrazený web

strana 38 RootViewController.m: - (void)tableview:(uitableview *)tableview didselectrowatindexpath:(nsindexpath *)indexpath WebController *detailviewcontroller = [[WebController alloc] initwithnibname:@"webcontroller" bundle:[nsbundle mainbundle]]; [detailviewcontroller seturladdress:[[items objectatindex:indexpath.row] valueforkey:@"link"]]; [self.navigationcontroller pushviewcontroller:detailviewcontroller animated:yes]; [detailviewcontroller release];

strana 39 Web na celou obrazovku [_webview setscalespagetofit:yes];

strana 40 StatusBar indikátor načítání

strana 41 WebController.m - (void)webviewdidstartload:(uiwebview *)webview { } UIApplication* app = [UIApplication sharedapplication]; app.networkactivityindicatorvisible = YES;

strana 42 WebController.m - (void)webviewdidfinishload:(uiwebview *)webview { UIApplication* app = [UIApplication sharedapplication]; app.networkactivityindicatorvisible = NO; } - (void)webview:(uiwebview *)webview didfailloadwitherror: (NSError *)error { } UIApplication* app = [UIApplication sharedapplication]; app.networkactivityindicatorvisible = NO;

strana 43 Rychlé zobrazení detailu

strana 44 Rychlé zobrazení detailu Classes -> Add -> New file Cocoa Touch Class With XIB for user interface DetailViewController.h

strana 45 DetailViewController.h IBOutlet UILabel *titlelabel; IBOutlet UILabel *timelabel; IBOutlet UITextView *textview; NSString *url; @property (nonatomic, retain) IBOutlet UILabel *titlelabel; @property (nonatomic, retain) IBOutlet UILabel *timelabel; @property (nonatomic, retain) IBOutlet UITextView *textview; @property (nonatomic, retain) NSString *url;

strana 46 DetailViewController.h @synthesize titlelabel, timelabel, textview, url;

strana 47 DetailViewController.m - (void)viewdidload self.title = @"RSS Detail";

strana 48 DetailViewController.h IBOutlet UILabel *titlelabel; IBOutlet UILabel *timelabel; IBOutlet UITextView *textview; NSString *url; @property (nonatomic, retain) IBOutlet UILabel *titlelabel; @property (nonatomic, retain) IBOutlet UILabel *timelabel; @property (nonatomic, retain) IBOutlet UITextView *textview; @property (nonatomic, retain) NSString *url;

strana 49 DetailViewController.m //pridat do (.h) //- (IBAction) showweb - (IBAction) showweb { } WebController *detailviewcontroller = [[WebController alloc] initwithnibname:@"webcontroller" bundle:[nsbundle mainbundle]]; [detailviewcontroller seturladdress:url]; [self.navigationcontroller pushviewcontroller:detailviewcontroller animated:yes]; [detailviewcontroller release];

strana 50 Rychlé zobrazení detailu

strana 51 DetailViewController.m DetailViewController *detailviewcontroller = [[DetailViewController alloc] initwithnibname:@"detailviewcontroller" bundle:[nsbundle mainbundle]]; [self.navigationcontroller pushviewcontroller:detailviewcontroller animated:yes]; NSString *l = [[items objectatindex:indexpath.row] valueforkey:@"link"]; [detailviewcontroller seturl:l]; NSString *t = [[items objectatindex:indexpath.row] valueforkey:@"title"]; [[detailviewcontroller titlelabel] settext:t]; NSString *s = [[items objectatindex:indexpath.row] valueforkey:@"summary"]; [[detailviewcontroller textview] settext:s]; NSString *d = [[items objectatindex:indexpath.row] valueforkey:@"date"]; [[detailviewcontroller timelabel] settext:d]; [detailviewcontroller release];

strana 52 Více RSS zdrojů? RootViewController.m RSSProcessor *secondrssprocessor = [[[RSSProcessor alloc] initwithdelegate:self] autorelease]; [secondrssprocessor parserssfeedaturl:@"http:// www.ceskenoviny.cz/sluzby/rss/index.php"];

strana 53 Více RSS zdrojů? - (void)parserdidenddocument:(nsxmlparser *)parser { NSLog(@"all done!"); NSMutableArray *tmparray = [[[NSMutableArray alloc] init] autorelease]; [tmparray addobjectsfromarray:[_delegate items]]; [tmparray addobjectsfromarray:stories]; } [_delegate setitems:tmparray];

strana 54 Děkuji za pozornost!