Jinsi ya Kupiga Files za XML katika Xcode

Kazi moja rahisi ambayo ni mgongo wa programu nyingi ni uwezo wa kupitisha faili za XML. Na, kwa bahati nzuri, Xcode inafanya kuwa rahisi kuelezea faili ya XML katika Lengo-C.

Faili ya XML inaweza kuwa na kitu chochote kutoka kwenye data ya msingi kuhusu programu yako kwenye mlozi wa RSS kwa tovuti. Wanaweza pia kuwa njia nzuri ya uppdatering maelezo ndani ya programu yako kwa mbali, hivyo kupitisha haja ya kuwasilisha binary mpya kwa Apple tu kuongeza kitu kipya kwenye orodha.

Kwa hivyo, tunafanya vipi faili za XML katika Xcode? Mchakato huo una hatua za kuanzisha vigezo vya kutumika, kuanzia mchakato wa mchakato wa XML, kulisha mchakato faili, mwanzo wa kipengele cha mtu binafsi, wahusika (thamani) ndani ya kipengele, mwisho wa kipengele cha mtu binafsi, na mwisho wa mchakato wa kupitisha.

Katika mfano huu, tutajifungua faili kutoka kwenye mtandao kwa kuipitisha anwani fulani ya wavuti ( URL ).

Tutaanza na kujenga faili ya kichwa. Hii ni mfano wa faili ya kichwa cha msingi sana kwa Mdhibiti wa Mtazamo wa Detail na mahitaji ya chini ya kupitisha faili yetu:

@interface RootViewController: UITableViewController {
DetailViewController * undaniViewController;

NSXMLParser * RssParser;
Vitu vya NSMutableArray *;
NSMutableDictionary * bidhaa;
NSString * currentElement;
NSMutableString * ElementValue;
Hitilafu ya BOOLParsing;
}

@property (nonatomic, kuhifadhi) IBOutlet DetailViewController * maelezoViewController;

- (haipo) parseXMLFileAtURL: (NSString *) URL;

Mpangilio wa parseXMLFileAtURL utaanza mchakato kwetu. Itaisha, NSMutableArray "makala" itahifadhi data zetu. Safu zitaundwa na kamusi za kamusi zinazoweza kutumiwa na funguo zinazohusiana na majina ya shamba katika faili ya XML.

Sasa kwa kuwa tumeanzisha vigezo vinavyohitajika, tutaendelea hadi kufikia mchakato kwenye faili ya .m:

- (haipo) Mchapishaji maelezoKuandika: (NSXMLParser *) parser {
NSLog (@ "Faili iliyopatikana na kupitishwa imeanza");

}

Kazi hii inaendesha mwanzoni mwa mchakato. Hakuna haja ya kuweka chochote katika kazi hii, lakini ikiwa unataka kufanya kazi wakati faili inapoanza kufutwa, hii ndio ambapo ungeweka msimbo wako.

- (haipo) parseXMLFileAtURL: (NSString *) URL
{

Mtaalam wa NSString * Mtaalam = @ "Mozilla / 5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-us) AppleWebKit / 525.27.1 (KHTML, kama Gecko) Version / 3.2.1 Safari / 525.27.1";
Ombi la NSMutableURLRequest * = ombi la NSMutableURLRequestWithURL:
[NSURL URLWithString: URL]];
[ombi la kuwekaValue: mjumbe wa HTTPHeaderField: @ "Mtumiaji-Agent"];
xmlFile = [Kutafuta kwa NJURI kutumaSynchronousKuomba: ombi kurudiResiponse: kosa la nil: nil];


makala = [[NSMutableArray alloc] init];
hitilafu = hakuna;

rssParser = [[NSXMLParser alloc] initWithData: xmlFile];
[rssParser setDelegate: kujitegemea];

// Unaweza kuhitaji kurejea baadhi ya haya kwa kutegemea aina ya faili ya XML unayotafuta
[rssParser kuwekaShouldProcessNamespace: NO];
[rssParser kuwekaShouldReportNamespacePrefixes: NO];
[rssParser kuwekaShouldResolveKujumuisha Makala: NO];

[rssParser parse];

}

Kazi hii inatafuta injini kupakua faili kwenye anwani fulani ya wavuti (URL) na kuanza mchakato wa kuifanya.

Tunauambia seva ya kijijini kuwa sisi ni Safari inayoendesha kwenye Mac tu ikiwa server inajaribu kurejesha iPhone / iPad kwenye toleo la simu.

Chaguo mwisho ni maalum kwa baadhi ya faili za XML. Faili nyingi za RSS na faili za kawaida za XML hazitakiwa ziweke.

- (haipo) parser: (NSXMLParser *) parserEserorIfunguo: (NSError *) parseError {

NSString * kosaString = [NSString stringWithFormat: @ "Msimbo wa hitilafu% i", [kinyume cha Makosa ya code]];
NSLog (@ "Hitilafu ya kupitisha XML:% @", hitilafuString);


kosaParsing = ndiyo;
}

Hii ni njia rahisi ya kuangalia kosa ambayo itaweka thamani ya binary ikiwa inakabiliwa na hitilafu. Unaweza kuhitaji kitu maalum zaidi hapa kulingana na unachofanya. Ikiwa unahitaji tu kukimbia msimbo baada ya usindikaji katika kesi ya hitilafu, kutofautiana kwa makosa ya Bina inaweza kuitwa wakati huo.

- (haijapokuwa) mchezaji: (NSXMLParser *) saraka didStartElement: (NSString *) elementName namespaceURI: (NSString *) namespaceURI qualiName: (NSString *) qName sifa: (NSDictionary *) sifaDict {
sasaElement = [kipengele cha nakala];
ElementValue = [[NSMutableString alloc] init];
ikiwa (elementName niEqualToString: @ "item"]) {
item = [[NSMutableDictionary alloc] init];

}

}

Nyama ya parser ya XML ina kazi tatu, moja inayoendesha mwanzoni mwa kipengele cha mtu binafsi, kinachoendesha wakati wa katikati ya kipengele, na kinachoendesha mwishoni mwa kipengele.

Kwa mfano huu, tutafuatilia faili inayofanana na faili za RSS zinazovunja vipengele katika vikundi chini ya kichwa cha "vitu" ndani ya faili ya XML. Mwanzoni mwa usindikaji, tutaangalia jina la kipengele "kipengee" na kugawa kamusi yetu ya bidhaa wakati kikundi kipya kinapotambuliwa. Vinginevyo, sisi kuanzisha variable yetu kwa thamani.

- (haipo) parser: (NSXMLParser *) kupatikana parserKichunguzi: (NSString *) kamba {
[ElementValue inaongeza: kamba];
}

Hii ni sehemu rahisi. Tunapopata wahusika, tunawaongeza tu kwenye "ElementValue" yetu ya kutofautiana.

- (haijapotea) parser: (NSXMLParser *) parser didEndElement: (NSString *) elementName namespaceURI: (NSString *) namespaceURI qualiName: (NSString *) qName {
ikiwa (elementName niEqualToString: @ "item"]) {
[makala ya kuongezaOjumu: [nakala ya kitu]];
} mwingine {
[item setObject: ElementValue ForKey: elementName];
}

}

Tunapomaliza kusindika kipengele, tunahitaji kufanya moja ya mambo mawili: (1) ikiwa kipengele cha mwisho ni "kipengee", tumeimaliza kikundi chetu, kwa hivyo tutaongeza kamusi yetu kwenye "safu" zetu ".

Au (2) ikiwa kipengele sio "kipengee", tutaweka thamani katika kamusi yetu kwa ufunguo unaofanana na jina la kipengele. (Hii ina maana hatuna haja ya kutofautiana kwa kila shamba ndani ya faili ya XML.Tunaweza kuzifanya kwa nguvu zaidi.)

- (haipatikani) Mchapishaji: Mchapishaji: (NSXMLParser *) parser {

ikiwa (kosaParsing == NO)
{
NSLog (@ "usindikaji wa XML uliofanywa!");
} mwingine {
NSLog (@ "Hitilafu ilitokea wakati wa usindikaji wa XML");
}

}

Huu ndio kazi ya mwisho inayohitajika kwa utaratibu wetu wa kupitisha. Inakaribia hati tu. Utaweka msimbo wowote unayotaka kumaliza mchakato hapa au chochote maalum ambacho ungependa kufanya wakati wa kosa.

Kitu kimoja programu nyingi zinaweza kutaka kufanya hapa ni kuokoa data na / au faili ya XML kwenye faili kwenye kifaa. Kwa njia hiyo, ikiwa mtumiaji haunganishi kwenye mtandao wakati mwingine wanapakia programu, bado wanaweza kupata taarifa hii.

Bila shaka, hatuwezi kusahau sehemu muhimu zaidi: kuambia maombi yako kufuta faili (na kuipa anwani ya wavuti ili kuipata!).

Ili kuanza mchakato, unahitaji tu kuongeza mstari huu wa kificho kwenye sehemu inayofaa ambapo unataka kufanya usindikaji wa XML:

[parseXMLFileAtURL: @ "http://www.webaddress.com/file.xml"];