UITableViewController, grote dataset en lazy loading

UITableViewController, grote dataset en lazy loading discussie in Ontwikkelen voor iOS forum; ( verdwijnt na registratie ) Beste Allemaal, Ik ben nieuw met iPhone development, maar heb een redelijk grote programmeerervaring voor niet Mac systemen. Zelf heb ik goed gegoogled en mij ...



Ga terug   iPhone, iPod touch, iPad en Apple TV forum > Development > Ontwikkelen voor iOS
Wachtwoord vergeten? Registreren!
Registreer FAQ Ledenlijst Kalender Zoeken Berichten van vandaag Markeer forums als gelezen
  #1  
Oud 16 January 2010, 01:21
» iPhone 3G 16GB (Zwart) [FW: 3.0]  [Jailbreak: Ja]
» Mac OS X
 
Geregistreerd: 16 January 2010
Berichten: 2
Standaard UITableViewController, grote dataset en lazy loading

Beste Allemaal,

Ik ben nieuw met iPhone development, maar heb een redelijk grote programmeerervaring voor niet Mac systemen. Zelf heb ik goed gegoogled en mij al sufgelezen in verschillende IPhone SDK boeken en gekeken naar iPhone cursussen als de Stanford iPhone Programming cursus. Alleen zijn voorbeelden daar altijd speelvoorbeelden en zijn niet wat ik zoek. Ik hoop dat jullie mij kunnen helpen.

Ik ben bezig met een applicatie waarin ik ruim 10.000 items in een lijst wil kunnen tonen. Gegevens over de 10.000 items staan opgeslagen in een SQLite database. De items toon ik in een lijst.

De voorbeelden uit de boeken werken zo:
1. lees alle records uit de database in een NSMutableArray *itemList
2. In de tableView:cellForRowAtIndexPath: method hergebruik je de TableViewCell en als die er niet is maak je een nieuwe aan
3. vul de cell.textLabel.text met de waardes die je wil laten zien

Dit werkt prima, behalve dat je 10.000 records in je geheugen hebt gelezen en dit niet geheugen efficient is. Stel dat dit 20.000 records worden of meer. De Stanford cursus zegt dat je 'Lazy Loading' moet gebruiken. Oftewel alleen die data binnenhalen als dat nodig is.

Kortom dan zou ik het denk ik zo moeten oplossen:
1. lees een aantal records in uit de database. Zeg 20 stuks.
2. Scroll je in de TableView met 10 regels richting het einde, lees dan nieuwe gegevens in en laat die zien in de Tableview
3. Scroll je terug in de TableView en dreig je tegen het begin te lopen, lees dan weer nieuwe data uit de database.

Geen enkel voorbeeld laat zien hoe ik dat moet doen. Kan iemand mij hier op weg helpen? Heeft iemand dit al eerder gedaan?

Alvast bedankt voor jullie suggesties!
Advertentie
Advertentie Gesponsorde links (verdwijnt na registratie)

  #2  
Oud 18 January 2010, 17:39
» iPhone 5s 16GB (Goud) [FW: 7.1.2]  [Jailbreak: Nee]
» iPad 1 Wi-Fi 16GB [FW: 5.1.1]  [Jailbreak: Nee]
» Mac OS X
 
Geregistreerd: 12 January 2009
Berichten: 484
Standaard

Hoi Kokeshi,

Ik geloof dat er een example op de developer website staat. Maar ik zal je toch even uitleggen hoe je het kunt doen.

De UITableView is al redelijk geoptimaliseerd. Dat wil zeggen, hij zal alleen informatie vragen voor de rows die op dat moment op het scherm zijn.

Voor elke cell die dus op het scherm is, krijg je dus een event binnen:

- (UITableViewCell *)tableViewUITableView *) tv cellForRowAtIndexPathNSIndexPath *)indexPath {

je kan dan met indexPath.section en indexPath.row uitvinden welk record ie wil hebben. Dit moet je dus op een of andere manier mappen naar bijvoorbeeld de keys van je data in de database.


Misschien is het trouwens een idee om naar CoreData te kijken, ik geloof dat daar goede integratie is en het voor een groot deel al voor je gedaan wordt.
__________________
Software Engineer
iPhone Developer
  #3  
Oud 19 January 2010, 12:18
» iPhone 4 32GB (Zwart) [FW: 5.0]  [Jailbreak: Nee]
» iPad 3 Wi-Fi 16GB (Zwart) [FW: 5.1]  [Jailbreak: Nee]
» Mac OS X
 
Geregistreerd: 14 October 2008
Locatie: Haarlem
Berichten: 348
Standaard 10.000 rijen in een tabel???

Als je zulke grote hoeveelheden data wilt laten zien, moet je je altijd afvragen of dat wel makkelijk in het gebruik is.
Gaat de gebruiker echt door die 10.000 rijen scrollen?? Nee dus.

Je moet dus een soort indexering gaan toepassen, en daar ligt al een deel van de oplossing van je probleem.

Effe uitleggen: stel je hebt een indexering op alfabet en de gebruiker selecteert de 'P' dan haal je alleen alle rijen op die met een 'P' beginnen, lazy dus.
Ook dat kun je in SQLite database optimaliseren door bv. een hulp-kolom te maken waar alleen de eerste letter in staat (alles kleine letters). Daar zet je een index op, en die kolom gebruik je in je WHERE clause.
__________________
Leon
[iPhone- en Java ontwikkelaar]
  #4  
Oud 19 January 2010, 15:53
» iPhone 3G 16GB (Zwart) [FW: 3.0]  [Jailbreak: Ja]
» Mac OS X
 
Geregistreerd: 16 January 2010
Berichten: 2
Standaard

@Whacko: bedankt voor je tip! rows en sections staan niet bij de Class descriptions, maar zijn een uitbreiding.

@wubbe: ben het met je eens dat je de gebruiker dit niet voor wilt schotelen. Ik heb ook andere ingangen ingebouwd hoe je tot de data komt, maar ik wil wel de mogelijkheid hebben dat de lijst ook gewoon doorzocht kan worden met een soort van aantal filtermogelijkheden bovenaan. De suggestie die jij daarvoor doet, lijkt me daarvoor prima werken. Dank!
Reageren


Er zijn 1 actieve gebruikers die momenteel deze discussie bekijken (0 leden en 1 gasten)

 
Discussietools
Weergave

Soortgelijke discussies

Discussie Auteur Forum Reacties Laatste bericht
PDF loading Warner eentje Jailbreak apps en thema's 9 12 August 2010 17:10
Lazy Loading Nib markvwijnen Ontwikkelen voor iOS 0 21 May 2009 00:01
Kid Lazy web app! roelofk iPhone Apps 8 6 February 2008 17:17

Regels voor berichten
Je mag geen nieuwe discussies starten
Je mag niet reageren op berichten
Je mag geen bijlagen versturen
Je mag niet je berichten bewerken

BB code is Aan
Smileys zijn Aan
[IMG]-code is Aan
HTML-code is Uit
Trackbacks are Aan
Pingbacks are Aan
Refbacks are Uit



Alle tijden zijn GMT +2. Het is nu 22:05.