Beyond det grunnleggende av JSONModel
14
Del
9
Del
Dette Cyber mandag Envato Tuts + kurs vil bli redusert til bare $ 3. Ikke gå glipp av.
I min forrige artikkel, lærte du om det grunnleggende JSONModel. Du så hvor lett det er å jobbe med JSON hjelp JSONModel og hvordan det gjør mye for deg med bak kulissene, for eksempel datavalidering og konvertering.
I denne opplæringen, vil du skape et mer komplekst program og du vil lære om en rekke funksjoner som gir enda mer kraft til modellklasser.
Ved slutten av denne artikkelen, vil du har opprettet en Flickr nettleser for iOS. . Søknaden vil snakke med Flickr JSON API og vise en samling av bilder jeg lastet opp til Flickr for denne opplæringen
Du vil lære å:
prosess kompleks API svar
bruke JSONModel datatransformasjoner for nettadresser og datoer
kart JSON nøklene til eiendommer med forskjellige navn
lage egendefinerte data konverter
preprocess API svar før de er analyserte
Det ferdige Flickr leseren vil se slik ut:
1. Prosjektet Setup
Fordi vi vil fokusere på å lære om JSONModel funksjoner, vil jeg gjerne begynne med et forsprang ved å starte med en grunnleggende prosjekt. Du kan finne prosjektet i kildefilene for denne opplæringen.
Åpne Xcode prosjekt og ta deg tid til å inspisere innholdet. Prosjektet har et enkelt oppsett, et enkelt tabellvisning kontrolleren viser en tom tabellvisning. Jeg har også inkludert to bibliotekene i prosjektet, JSONModel Hotell og SDWebImage
.
Bygg og kjøre prosjektet for å sikre at prosjektet kompilerer uten feil.
2. Response Modell
La oss ta en titt på Flickr offentlige bilder mate. Åpne API endepunkt i nettleseren din og ta deg tid til å inspisere respons. Responsen har bare noen få toppnivå nøkler, som tittel og modifisert. Det er også en nøkkel kalt elementer som inneholder en liste over fotoobjekter hver med en tittel, link, beskrivelse, etc.
I det følgende skjermbilde, jeg har fremhevet en av disse fotoobjekter i elementer array å hjelpe deg finne ut sine eiendommer.
La oss begynne med å lage en modell klasse for responsen fra offentlige bilder mate. Opprett en ny klasse i Xcode, name it PublicPhotosModel, og gjøre det arve fra JSONModel. Du er interessert i tittelen og modifiserte nøklene til JSON svar, så legg to eiendommer med samme navn i grensesnittet av PublicPhotoModel klassen. Du vil også hente rekken av bilder og lagre dem i en eiendom vil vi nevne elementer. Angi hvilken type element eiendom til NSArray som vist nedenfor
#import "JSONModel.h"@interface PublicPhotosModel. JSONModel @ eiendom (kopi, nonatomic) NSString * tittel;property (sterk, nonatomic) NSDate * modifisert; property (sterk, nonatomic) NSArray * elementer;end
I dette eksempelet bruker du en av de innebygde data transformatorer av JSONModel. Når du har en date i JSON respons som følger W3C-format, kan du erklære den matchende modell egenskap av typen NSDate og JSONModel vil vite hva de skal gjøre.
Din grunnleggende modellen klassen til å hente JSON data fra Flickr API er klar. La oss koble den til tabellvisning i ditt syn kontrolleren. Du vil bruke elementer array i din modell objekt, som representerer responsen fra Flickr API, som datakilde tabellvisningen
Merk:.
Du lurer kanskje på hvordan du konverterer datoer hvis de ikke svarer til W3C standard eller hvis JSON responsen inkluderer tidsstempler. Holde lesing. Før slutten av denne opplæringen, vil du vite hvordan du kan forvandle noen verdi for en Objective-C objekt.
3. Henter JSON fra Flickr API
Start med å åpne ViewController.m Hotell og under eksisterende import uttalelse, legger en import statement for modellen klassen vi nettopp opprettet:
#import " PublicPhotosModel.h "
Neste, erklærer en privat eiendom for å lagre PublicPhotosModel eksempel vi skal bruke:
interface ViewController ()property (sterk, nonatomic) PublicPhotosModel * photosModel;end
Du ll hente JSON data ved hjelp av en hjelper metode, fetchPhotos, som vi skal gjennomføre innen kort tid. Vi påberope fetchPhotos i visningen kontrollerens viewDidLoad metode: Anmeldelser - (void) viewDidLoad {[super viewDidLoad]; //Fetch Bilder [selvtillit fetchPhotos];}
I fetchPhotos, gjør vi bruk av NSURLSession klassen til å søke i Flickr API som du kan se nedenfor: Anmeldelser - (void) fetchPhotos {NSURL * photosURL = [NSURL URLWithString:@"http://api.flickr.com/services/feeds/photos_public.gne?id=46760712@N07&lang=en-us&format=json&nojsoncallback=1"]; [[[NSURLSession sharedSession] dataTaskWithURL: photosURL completionHandler: ^ (NSData * data, NSURLResponse * respons, NSError * feil) {//Process data}] gjenoppta];}
Gjennomføringen er ganske likt det du skrev i tidligere artikkel om JSONModel. Du først erklære photosURL, som inneholder nettadressen til en bestemt mating av bilder på Flickr, og deretter opprette og fyre av en NSURLSessionDataTask eksempel å hente listen over bilder av at fôr
Merk:.
Hvis du har en Flickr-konto og kjenner din Flickr-ID, så gjerne inkludere det i anmodningen URL å ha programmet hente din egen feed av bilder.
Hvis du har lest den første artikkelen på JSONModel, da du allerede vet hvordan du slår den NSData objektet, returneres av data oppgaven, i en JSONModel objekt. Flickr, men ikke alltid returnere en gyldig JSON respons. Med andre ord, må du gjøre noe forbehandling før du oppretter din modell objekt.
Flickr API har en spesiell funksjonen Hotell som unnslipper apostrof i JSON respons. Problemet er at dette gjør det JSON responsen ugyldig i henhold til gjeldende standarder, og som et resultat, kan NSJSONSerialization API ikke behandle den.
For å fikse dette, trenger du bare å fjerne den rømte apostrof i JSON svar. Deretter kan du trygt lage din modell objekt. Bytt //prosessdata med følgende tekstutdrag:
NSString * rawJSON = [[NSString alloc] initWithData: dataomkoding: NSUTF8StringEncoding]; rawJSON = [rawJSON stringByReplacingOccurrencesOfString: @ "\\\\ '" withString: @ "'"]; self.photosModel = [[PublicPhotosModel alloc] initWithString: rawJSON error: null]; dispatch_async (dispatch_get_main_queue () ^ {self.title = self.photosModel.title [self.tableView reloadData];});
Du starter ved å opprette en NSString objekt fra NSData eksempel data oppgaven tilbake til deg. Det er trygt å anta at teksten er UTF8 kodet siden Flickr bruker bare UTF8. Deretter erstatte alle forekomster av \\ "med" å forberede JSON responsen for JSONModel
Siden du allerede har JSON responsen som en streng objekt, kan du bruke den egendefinerte JSONModel initializer, initWithString. Error: å skape modellen eksempel. Du bruker GCD å oppdatere brukergrensesnitt på hovedtråden. Utsikten controller tittel er oppdatert med den tittelen tilhører den PublicPhotosModel forekomst og tabellvisningen lastes på nytt.
Bygg og kjøre prosjektet for å sjekke at tittelen er satt, noe som indikerer at modellen objektet er riktig initialisert. Gi programmet en stund å hente JSON data fra Flickr API. Du skal da se tittelen på fôr på toppen av skjermen:
Om for noen grunn, ser du ikke tittelen på fôr som i skjermbildet over, og deretter legge en logg uttalelse i ferdigstillelse handler av data oppgave å feilsøke problemet. Hvis du ønsker å sjekke om en feil ble kastet under oppretting modellen objekt, deretter oppdatere initialisering av modellen objekt som følger:
NSError * err; self.photosModel = [[PublicPhotosModel alloc] initWithString: rawJSON error: & err]; if (err) {NSLog (@ "Kan ikke initial PublicPhotosModel,% @", err.localizedDescription);}
Som du ser, bruker JSONModel standard Cocoa feilbehandling paradigme, noe som betyr at du kan sjekke hvis initWithString: error:. kaster en feil
4. Implementere Tabell
I øyeblikket behandler JSONModel rekken av elementer som en vanlig array, som inneholder NSDictionary stedene. Dette er greit for nå, men vi skal lage en skikkelig fotomodell senere i denne opplæringen. Det er på tide å fylle tabellvisning med elementene i tabellen.
La oss starte med å bygge brukergrensesnittet. Først, vil du sette tittelen på tabellvisningen delen header, som vil vise den siste datoen for endring av Flickr feed. Du kan bruke en NSDateFormatter eksempel å konvertere NSDate objekt til en lesbar streng og returnere det fra Tableview: titleForHeaderInSection :: Anmeldelser - (NSString *) Tableview: (UITableView *) Tableview titleForHeaderInSection: (NSInteger) section {NSDateFormatter * formaterings = [[NSDateFormatter Alloc] init]; formatter.dateStyle = NSDateFormatterMediumStyle; formatter.timeStyle = NSDateFormatterMediumStyle; tilbake [formaterings stringFromDate: self.photosModel.modified];}
Deretter legger de to nødvendige metoder for tabellvisningen datakilde protokollen for å fortelle tabellvisningen hvor mange seksjoner og rader det inneholder. Bruk self.publicPhotos.items som tabellen vise datakilde: Anmeldelser - (NSInteger) numberOfSectionsInTableView: (UITableView *) Tableview {return 1;} - (NSInteger) Tableview: (UITableView *) Tableview numberOfRowsInSection: (NSInteger) section { returnere self.photosModel.items.count;}
Fordi bildet visningen av UITableViewCell klassen ikke laste eksterne bilder asynkront, du trenger en tilpasset UITableViewCell underklasse. Opprett en ny Objective-C-klasse, name it ImageCell, og gjøre det til en underklasse av UITableViewCell. Åpne ImageCell.h Hotell og legge en eiendom av type UIImageView, webImageView:
#import < UIKit /UIKit.h >interface ImageCell: UITableViewCell @ eiendom (sterk, nonatomic) UIImageView * webImageView; @ end
Åpne ImageCell.m Hotell og overskrive initializer Xcode satt der for deg. I initWithStyle :, må du skjule standardbildevisningen og lage en ny tilpasset bildevisningen. Tro det eller ei, men det er hva det tar å laste inn bilder asynkront i en tabellvisning celle Anmeldelser - (id) initWithStyle:. (UITableViewCellStyle) stil reuseIdentifier: (NSString *) reuseIdentifier {selv = [super initWithStyle: style reuseIdentifier: reuseIdentifier]; if (egen-) {self.webImageView = [[UIImageView alloc] initWithFrame: CGRectMake (0.0, 0.0, 40.0, 40.0)]; [selvtillit addSubview: self.webImageView]; UIGraphicsBeginImageContextWithOptions (CGSizeMake (20,0, 20,0), NO, kNilOptions); self.imageView.image = UIGraphicsGetImageFromCurrentImageContext (); UIGraphicsEndImageContext (); } Returnere selv;}
Er du forvirret av den andre halvparten av gjennomføringen? Du oppretter et tomt bilde av 20px av 20px og angi det som bildet av cellens standardbildevisningen. Du gjør dette for å posisjonere cellens tekstetikett riktig. Dette skjer selv før bildet for egendefinerte bildevisningen er lastet fra nettet.
Revidere ViewController.m Hotell og under de eksisterende import uttalelser, legge en import statement for den tilpassede UITableViewCell klassen vi skapt
#import "ImageCell.h"
Du er klar for den siste brikken i puslespillet, datakilden metode for å skape celler for tabellen:. Anmeldelser - (UITableViewCell *) Tableview : (UITableView *) Tableview cellForRowAtIndexPath: (NSIndexPath *) indexPath {statisk NSString * const CellID = @ "ImageCell"; ImageCell * celle = [self.tableView dequeueReusableCellWithIdentifier: CellID]; if (celle!) {celle = [[ImageCell alloc] initWithStyle: UITableViewCellStyleSubtitle reuseIdentifier: CellID]; } Cell.textLabel.text = [@ (indexPath.row) stringValue]; returnere celle;}
Bygg og kjøre prosjektet en gang til for å se at tabellen viser nå en celle for hver av gjenstander funnet i elementer. Snakker av elementer, er det på tide å lage fotomodellen.
5. Photo Model
Som vi så i forrige tutorial, må du opprette en egen modell klasse for en liste over objekter i JSON respons, listen over fotoprodukter i vårt eksempel. Opprett en ny Objective-C-klasse, name it fotomodell, gjøre det til en underklasse av JSONModel
Ha en titt på rå JSON responsen du får fra Flickr API og bestemme hvilke taster hvert bilde objekt må ha.:
Du ønsker å hente tittel, URL-adressen til bildet, da den ble publisert, og koblingen til detaljsiden på Flickr. Vi har et problem skjønt. Nettadressen til bildet er vedlagt i enda en gjenstand under medietasten. Betyr dette at du trenger for å lage en annen JSONModel underklasse bare å trekke ut enkelt tast, m, som inneholder nettadressen til bildet?
Heldigvis er det korte svaret ingen
. Til elegant løse dette problemet, må du lære og forstå hvordan sentrale kartleggingsarbeid i JSONModel. Kartlegging tastene er en enkel måte å instruere JSONModel underklasse hvordan du kan hente data fra en JSON respons, noe som er spesielt nyttig hvis JSON nøklene ikke helt overens med navnene på din klasse eiendommer.
Start med å erklære egenskapene vi trenger i fotomodell Klasse:
#import "JSONModel.h"@interface fotomodell: JSONModel @ eiendom (kopi, nonatomic) NSString * tittel;property (sterk, nonatomic) NSURL * url;property (sterk, nonatomic) NSURL * link;property (sterk, nonatomic) NSDate * publisert;end
Vi bruker to av den innebygde data transformatorer av JSONModel. Den publiserte er av typen NSDate og JSONModel vil sørge for å konvertere W3C
dato til en NSDate objekt. URLen og koblingsegenskaper er av type NSURL og JSONModel vil konvertere de tilsvarende strenger av JSON respons på NSURL stedene.
Åpne PhotoModel.m Hotell og legge inn følgende kode for å sette opp nøkkelen kartlegging for fotomodell:
+ (JSONKeyMapper *) keyMapper {NSDictionary * kart = @ {@ "publisert": @ "date", @ "media.m": @ "url"}; tilbake [[JSONKeyMapper alloc] initWithDictionary: kart];}
I keyMapper, overstyrer du JSONModel sin keyMapper metode. Den returnerer en JSONKeyMapper eksempel objektet som kart JSON nøkler til egenskapsnavnene. Den JSONKeyMapper klasse har en praktisk initializer som aksepterer en ordbok og skaper en nøkkel mapping mellom JSON data og din klasse.
I over gjennomføringen av keyMapper definerer du følgende nøkkel kartlegging.
Den publiserte nøkkelen i JSON Response maps til modellens dato eiendom
m nøkkel av medieobjekt i JSON Response kartene til URL i modellen.
Med keyMapper implementert, JSONModel kan analysere JSON respons og initialfotomodellen som er definert av fotomodell klassen.
Før du går videre, åpen PhotoModel.h gang, og på toppen, erklærer en protokoll med samme navn som navnet på klassen:
#import "JSONModel.h"@protocol fotomodell @ enden @ grensesnitt fotomodell: JSONModel @ eiendom (kopi, nonatomic) NSString * tittel;property (sterk, nonatomic) NSURL * url;property (sterk, nonatomic) NSURL * link;property (sterk, nonatomic) NSDate * publisert;end
6. Viser foto feed
Bytt til PublicPhotoModel.h Hotell og legge en import uttalelse på toppen:
#import "PhotoModel.h"
For å gjøre alt dette arbeidet, foreta element eiendommen holder seg til fotomodell protokollen vi erklært et øyeblikk siden i fotomodell Klasse:
property (sterk, nonatomic) NSArray < fotomodell > * elementer;
Nå må du gjøre et par justeringer i ViewController klassen. For å laste og vise bildene i tabellen vise celler, vil du bruke en metode erklærte i SDWebImage
bibliotek, som var inkludert i prosjektet du startet med. Åpne ViewController.m Hotell og legge til en ny import uttalelse på toppen:
#import "UIImageView + WebCache.h"
Deretter besøker implementeringen av Tableview: cellForRowAtIndexPath: hvor du foreløpig bare viser radnummer. Men fordi du nå kan hente tilsvarende fotomodell objekt for hver rad i tabellvisningen, er det bedre å vise bildets detaljer i stedet. Oppdater gjennomføringen som vist nedenfor: Anmeldelser - (UITableViewCell *) Tableview: (UITableView *) Tableview cellForRowAtIndexPath: (NSIndexPath *) indexPath {statisk NSString * const CellID = @ "ImageCell"; ImageCell * celle = [self.tableView dequeueReusableCellWithIdentifier: CellID]; if (celle!) {celle = [[ImageCell alloc] initWithStyle: UITableViewCellStyleSubtitle reuseIdentifier: CellID]; } Fotomodell * bilder = self.photosModel.items [indexPath.row]; cell.textLabel.text = photo.title; [cell.webImageView setImageWithURL: photo.url placeholderImage: null]; returnere celle;}
Du først hente fotomodell objektet som tilsvarer det rad i tabellvisningen og du deretter fylle cellens tekst etikett med tittelen på bildet. Du bruker SDWebImage sin setImageWithURL: placeholderImage. Til asynkront laste og vise bilder fra den gitte URL
Tro det eller ikke, har du allerede fått en fungerende Bildestrøm. Bygge og drive prosjektet for å se resultatet:
7. Custom data Transformations
I denne delen, kommer du til å lage en spesialtjeneste til fotomodell klasse, som vil konvertere en streng fra JSON respons til en tilpasset Objective-C-klassen. Dette vil lære deg hvordan du kan konvertere noen JSON data til enhver Objective-C-klassen.
I JSON data for et bilde, det er en koder nøkkel som inneholder en rekke koder. Du vil legge til en ny eiendom til fotomodell klassen. Typen av denne eiendommen vil være en tilpasset Objective-C-klassen som kan håndtere tags
Merk:.
Du er ikke begrenset til å konvertere JSON data til tilpassede Objective-C klasser. Du kan konvertere JSON data til enhver Cocoa klasse. For eksempel kan du konvertere en hex farge, for eksempel # cc0033
, til sin UIColor tilsvarende. Hold lesing for å se hvordan du gjør det.
Opprett en ny klasse, name it tagger, og gjør det til en underklasse av NSObject. Åpne Tags.h Hotell og legge en eiendom til å lagre en liste over koder og erklære en tilpasset initializer:
#import < Foundation /Foundation.h >interface Tags: NSObject @ eiendom (sterk, nonatomic ) NSArray * tags; #pragma mark - # pragma mark Initialization- (instancetype) initWithString: (NSString *) streng,end
Bytt til Tags.m Hotell og implementering av initializer du nettopp erklært. Som du kan se, er det ikke noe spesielt om det. Du bruker strengen til å skape en rekke koder og lagrer kodene i tags: Anmeldelser - (instancetype) initWithString: (NSString *) string {selv = [super init]; if (egen-) {self.tags = [string componentsSeparatedByString: @ ""]; } Returnere selv;}
Du har nå en tilpasset Tags klasse, men hvordan kan du bruke det i din fotomodell? Åpne PhotoModel.h
, importere den nye klassen på toppen, og erklære en ny eiendom i klassen grensesnitt:
#import "JSONModel.h" #import "Tags.h"@protocol fotomodell @ end @ grensesnitt fotomodell: JSONModel @ eiendom (kopi, nonatomic) NSString * tittel;property (sterk, nonatomic) NSURL * url;property (sterk, nonatomic) NSURL * link;property (sterk, nonatomic) NSDate * publisert; property (sterke, nonatomic) Tags * tags;end
Bygg og kjøre prosjektet som det er å se hva som vil skje
Fordi tags Eiendommen er av typen tagger, som JSONModel ikke vet. hvordan å håndtere, vil programmet krasjer, og du bør se følgende feilmelding i XCode konsoll:
Det er på tide å bli kjent med en ny klasse av JSONModel biblioteket, JSONValueTransformer klasse. I de fleste tilfeller fungerer det JSONValueTransformer bak kulissene og konverterer grunnleggende datatyper for deg, NSNumber til en flåte, NSString å NSNumber, eller NSString å NSDate. Klassen, men kan ikke gjøre noe med tilpassede klasser, fordi det ikke vet hvordan de skal jobbe med dem.
Det fine JSONValueTransformer er at du kan utvide den til å hjelpe det å lære å håndtere tilpassede klasser- eller noen Cocoa klasse for den saks skyld
Velg New >.; Fil ...
fra Xcode Fil
menyen og velg Objective-C kategori
fra listen over maler. Klikk Neste
å fortsette.
navn kategorien Tags Hotell og sette Kategori På
å JSONValueTransformer. Klikk Neste
å fortsette.
I denne kategorien på JSONValueTransformer, kan du definere de nødvendige metoder for håndtering av egenskapene til typen tagger. Åpne JSONValueTransformer + Tags.h Hotell og importere header fil av Tags klassen. Deretter legger du til følgende to metoder til grensesnittet av kategorien:
#import "JSONValueTransformer.h" #import "Tags.h"@interface JSONValueTransformer (Tags) - (id) TagsFromNSString: (NSString *) streng, - (id) JSONObjectFromTags: (Tags *) tags;end
La oss ta en nærmere titt på navnene på disse metodene
TagsFromNSString:. består av navnet på klassen eller type du vil å konvertere til, Tags, etterfulgt av Fra Hotell og deretter den typen i JSON data for den respektive tasten, NSString. Kort sagt, når JSONModel finner en eiendom av type Tags, vil den prøve å matche en JSON nøkkel av type NSString. Når en kamp blir funnet, vil det påkalle TagsFromNSString :.
JSONObjectFromTags: håndterer det motsatte konverteringen. Når JSONModel eksporterer modellen objektet tilbake til JSON data, det er behov for å påkalle en metode som vil ta Tags protestere og returnere en skikkelig streng. Dermed navnet på metoden er JSONObjectFrom etterfulgt av navnet på klassen eller typen av eiendommen, tagger.
Når du har definert disse to metodene, vil eventuelle JSONModel underklasse kunne håndtere objekter av typen koder. Legge til en kategori på JSONValueTransformer er en veldig enkel måte å legger til funksjonalitet til modellklasser programmets.
La oss nå se nærmere på gjennomføringen av de to metodene i vår kategori. La oss først implementere metoden som aksepterer en NSString objekt og returnerer et Tags objekt: Anmeldelser - (id) TagsFromNSString: (NSString *) string {return [[Merker Alloc] initWithString: string];}
Takket være tilpasset initializer, initWithString :, gjennomføringen er enkel. Det tar strengen av koder fra de JSON data og returnerer en Tags objekt, som er tildelt din tags eiendom i fotomodell klassen.
Deretter implementere den andre metoden, som er påberopt når modellen objektet blir konvertert til en streng. Dette er den metoden som vil bli kalt når du påberope JSONModel sin toDictionary og toJSON Anmeldelser - (id) JSONObjectFromTags: (Tags *) tags {return [tags.tags componentsJoinedByString: @ ""];}.
Når en PublicPhotosModel eksempel er initialisert, vil den automatisk opprette fotomodell gjenstander og lagre dem i elementer eiendom. Hver fotomodell objektet vil også opprette et Tags objekt for sin tags eiendom. Alt dette skjer automatisk takket være den kategorien vi opprettet på JSONValueTransformer.
La oss nå gjøre bruk av koder eiendom i fotomodell klassen. Åpne ViewController.m Hotell og oppdatere gjennomføringen av Tableview: cellForRowAtIndexPath: ved å fylle cellens detalj tekst etikett med bilde liste over koder Anmeldelser - (UITableViewCell *) Tableview:. (UITableView *) Tableview cellForRowAtIndexPath: (NSIndexPath *) indexPath {statisk NSString * const CellID = @ "ImageCell"; ImageCell * celle = [self.tableView dequeueReusableCellWithIdentifier: CellID]; if (celle!) {celle = [[ImageCell alloc] initWithStyle: UITableViewCellStyleSubtitle reuseIdentifier: CellID]; } Fotomodell * bilder = self.photosModel.items [indexPath.row]; cell.textLabel.text = photo.title; cell.detailTextLabel.text = [photo.tags.tags componentsJoinedByString: @ ","]; [cell.webImageView setImageWithURL: photo.url placeholderImage: null]; returnere celle;}
Bygg og kjøre prosjektet. Du skal se de kodene for hvert bilde vises nedenfor bildets tittel
For å gjøre vår Flickr nettleser komplett, implementere Tableview. DidSelectRowAtIndexPath: av UITableViewDelegate protokollen. I Tableview: didSelectRowAtIndexPath :, vi hente den tilsvarende bilder og åpne bilder detaljsiden i Safari Anmeldelser - (void) Tableview:. (UITableView *) Tableview didSelectRowAtIndexPath: (NSIndexPath *) indexPath {[self.tableView deselectRowAtIndexPath: indexPath animert :JA]; Fotomodell * bilder = self.photosModel.items [indexPath.row]; if ([[UIApplication sharedApplication] canOpenURL: photo.link]) {[[UIApplication sharedApplication] openURL: photo.link]; }}
Når du trykker på rad i tabellvisningen, vil du bli tatt til bilder detaljside på Flickr:
Konklusjon
I denne opplæringen brukte du mer kompleks og kraftig funksjonene i JSONModel bibliotek. Jeg håper du kan se hva en tidsbesparende JSONModel kan være og hvordan det kan hjelpe deg på mange nivåer i dine iOS og OS X prosjekter. Hvis du ønsker å lære mer om JSONModel, oppfordrer jeg deg til å utforske bibliotekets dokumentasjon.