iCulture forum | iPhone, iPad,  iPod touch, Apple TV en iOS

iCulture forum | iPhone, iPad, iPod touch, Apple TV en iOS (https://forum.iculture.nl/)
-   Ontwikkelen voor iOS (https://forum.iculture.nl/f133/development/f58/ontwikkelen-voor-ios/)
-   -   Tables vs. plist (https://forum.iculture.nl/f133/development/f58/ontwikkelen-voor-ios/39739-tables-vs-plist.html)

JVdV 15-07-09 21:13

Tables vs. plist
 
Hallo iedereen,

even een korte intro :D
Een maat van mij heeft me wat leren programmeren in xcode. Dit gaat vrij goed, simpele dingen kan ik al. Nu, m'n maat is vertrokken op vakantie voor anderhalve maand, en dus zit ik hier vast, ik probeer overal van internet tutorials te proberen welke ook goed gaan, maar nu had ik een idee. (Hieronder moet gewoon het concept duidelijk zijn, maar ik dacht ik ga er een leuk voorbeeld van maken zodat het gemakkelijker te begrijpen is :D)

Een navigationbased app. In de root view zie je een lijst met films (indexed table). Tap je op een film, dan ga je naar de first view, en daar komt dan een indexed table, met index opzij, waar alle acteurs opgesomd staan die in de film voorkomen. Tap je dan op een acteur dan ga je naar second view, en daar krijg je dan een grouped table waar bij elke row iets links staat vb "naam, voornaam, geboortedatum,etc.."(denk aan de contacten-app).

Dit is gewoon eens om te zien hoe te werken met tables, want is ontzettend belangrijk voor de iPhone.

Maar mijn vraagjes(!) waren nu de volgende:

Is het mogelijk om voor dit bestand een plist te gebruiken, want de lijst met de acteurs alleen al kan wel bijhoorlijk lang worden dan.
plist zou er vb zo uitzien:

-film 1
--Acteur 1
---Naam
---Voornaam
---Geb.datum
[...]
--acteur 2
---Naam
[...]
-film 2
[...]

En hoe populate je nu eigenlijk een table met gegevens uit een plist? Ik vind geen enkel deftige tutorial op internet . Ik heb al voorbeeldcode gevonden (oa van Apple zelf), maar dat vind ik nog net iets te moeilijk om te ontleden..

Moeten hier nib's voor gebruikt worden of niet? Ik werk er wel graag mee, en volgens mij kan het wel, of is het niet aan te raden?

Ik weet dat ik voor velen hier onder jullie die al verschillende apps in de app store hebben als een newb overkom. Wel je hebt gelijk :) Ik ben sinds 2 weken bezig, omdat het vakantie is. Ik heb tot hoofdstuk 5 het e-book "Beginning With iPhone Development" gevolgd. De reden waarom ik gestopt ben is omdat je de code niet kan kopiëren. In het begin moet je drie regels code ofzo toevoegen, en dan valt het nog mee om altijd te wisselen van het ene venster naar het andere, maar naargelang ik vorderde in het boek werden het alsmaar meer regels code, en dan was het niet meer te doen.

Dus, erg bedankt diegenen die me willen helpen, echt ik apprecieer het enorm dat je hier even de tijd voor wilt nemen.

Jelle

Matisse 16-07-09 15:50

Als je toch tijd hebt, kijk eens naar de cursus iPhone Development van Stanford university. Geeft een goed overzicht en alle code is te downloaden.

Matisse 16-07-09 16:07

Citaat:

Oorspronkelijk geplaatst door JVdV (Bericht 324742)
Hallo iedereen,
plist zou er vb zo uitzien:

-film 1
--Acteur 1
---Naam
---Voornaam
---Geb.datum
[...]
--acteur 2
---Naam
[...]
-film 2
[...]

En hoe populate je nu eigenlijk een table met gegevens uit een plist? Ik vind geen enkel deftige tutorial op internet . Ik heb al voorbeeldcode gevonden (oa van Apple zelf), maar dat vind ik nog net iets te moeilijk om te ontleden..
Jelle

De plist is dus een array van films, elke film een dictionary met voor de key "acteurs" een array van acteurs, elke acteur een dictionary met keys "naam", "voornaam" en "geboortedatum" hoop ik?

Inlezen van de plist in viewDidLoad van ViewController1
Code:

NSArray *films = [NSArray arrayWithContentsOfFile:@"films.plist"];
Table van films populeren in functie cellForRowAtIndexPath van ViewController1
Code:

NSDictionary *film = [films objectAtIndex:indexPath.row];
cell.textLabel.text = [film objectForKey:@"naam"];

Bij didSelectRowAtIndexPath van ViewController1 laad je ViewController2
Code:

ViewController2 vc = [[ViewController2 alloc] initWithNob:@"View2" withBundle:nil];
NSDictionary *film = [films objectAtIndexPath:indexPath.row];
vc.acteurs = [film objectForKey@"acteurs"]; // acteurs is een propery en ivar in ViewController2
[self.navigationController pushViewController:vc];
[vc release];

Table van acteurs populeren in cellForRowAtIndexPath van ViewController2
Code:

NSDicttionary *acteur = [[acteurs objectAtIndexPath:indexPath.row];
cell.textLabel.text = [acteur objectForKey:@"naam"];

(alles onder voorbehoud van syntaxfouten, ik heb hier geen xcode ter beschikking)

danielpunt 17-07-09 01:13

ik zou een plist niet gebruiken als database. het is een XML en kan dus alleen maar in 1 keer geladen worden, wat dus veel geheugen kost en ook niet erg snel is.

je kunt beter een SQLite database of CoreData gebruiken, dan kun je ook een database manager gebruiken in plaats van de XML handmatig bewerken.

een plist zou ik alleen maar bewaren voor wat statische informatie zoals inloginformatie (wel encoded natuurlijk) en voorkeuren.

JVdV 19-07-09 15:15

dankje allebei al, denk dat ik toch maar voor de XML ga gaan dan, ik denk dat apple daar een tutorial of code voor heeft, als ik me niet vergis.

Jelle

danielpunt 20-07-09 07:26

Apple heeft ook voorbeelden van CoreData en SQLite, en er zijn ook wel tutorials van te vinden.

JVdV 22-07-09 14:44

Citaat:

Oorspronkelijk geplaatst door danielpunt (Bericht 326797)
Apple heeft ook voorbeelden van CoreData en SQLite, en er zijn ook wel tutorials van te vinden.

SQLite ftw! :) Net tegen gekomen in de tutorials die te vinden zijn in de itunes Store, nu nog dat programma vinden om gemakkelijk (visueel) die databases aan te passen...

danielpunt 22-07-09 20:45

Ik gebruik de FireFox plugin SQLite Manager :) daar kun je ook lokale databases mee bewerken.

Overigens heb ik deze week voor het eerst Core Data echt gebruikt en het is aan het begin toch wel wat lastig, maar als je het door hebt best wel prettig werken.


Alle tijden zijn GMT +2. Het is nu 02:43.