Pokreni novu diskusiju

Pozdrav korisniče,

Za pun pristup forumu odaberi jedno od ova dva dugmeta:

Login with Facebook Sign In with Google Sign In with OpenID Sign In with Twitter

Top Posters

MacKorisnici (6820)

  • iVlad
  • kinsif
  • route00
  • schwarld
  • sina
  • iWave
  • Robery0900
  • blenton
  • tomislav10
  • iBoki
  • Yardie
  • FRAGMENTmultimedija
  • Gogic
  • tomasso
  • SkiSan
  • Clark Kent

Tko je online (0)

Problem pri sortiranju podataka iz .plist
  • Pozdrav. Izrada moje aplikacije za iPhone dosla je do tocke da sam uspio ucitati podatke iz .plist u tableView i sortirati sekcije (sections) po abecedi. Problem mi je sortirati redove u sekcijama po abecedi. Koristim custom cell koji ima image i text. .plist izgleda ovako: root je dictionary; section name je array; item0 je dictionary; name je string; image je string; docName je string; item1 je dictionary; itd.

    docName je ime dokumenta koji se ucitava u detail View kada se pritisne na red (sada mi se ucitavaju pogresni dokumenti). Nikako moj pocetnicki mozak ne uspijeva sloziti kod koji bi taj unutrasnji dictionary izvukao iz .plist i slozio ga po abecedi. Ima li netko dobru ideju za ovaj problem (osim da se ostavim programiranja)?

  • 25 Komentara sorted by
  • Svaki section sortiraj s NSSortDescriptorom.

    Nesto ovako: (plistRoot je NSDictionary ucitan iz plista)

    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"docName" ascending:YES]; NSArray *sortiraniSection = [[plistRoot objectForKey:@"ime-sectiona"] sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]]; [sortDescriptor release];

    Zadnji put molim @tmilovan-a da poduzme nesto oko formatiranja koda na forumu, ovo je potpuno neupotrebljivo -.-

    Post edited by ficho at 2011-01-17 18:08:07
    SMRT VANILIJI, SLOBODA FORUMASIMA!
  • Spomenuo je vec da su mu sekcije sortirane pa se nisam za to brinuo.

    IgorD said: onda bih ga morao nekako učitatati. :)

    Na srecu NSArray i NSDictonary vole citat/pisat .plist fileove :)

    NSString *path = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:@"file.plist"]; NSDictionary *ucitaniDict = [[NSDictionary alloc] initWithContentsOfFile:path];

    SMRT VANILIJI, SLOBODA FORUMASIMA!
  • Np, drago mi je da si rijesio :) Ako jos gdje zapne tu sam.

    SMRT VANILIJI, SLOBODA FORUMASIMA!
  • Pa zasto jednostavno ne napravis plist i isprobas moj kod pa ces vidjet da radi? :)

    SMRT VANILIJI, SLOBODA FORUMASIMA!
  • Hvala ficho, danas sam bio odsutan cijeli dan i nisam stigao raditi na aplikaciji pa zato odgovaram ovako kasno. Hvala na "code snippet" cini se super, poradicu na tome sutra jedino... sto imam oko 50 sections.

  • feinstimmer said: sto imam oko 50 sections.

    Nije to problem :) NSDictionary ima metodu allKeys koja vraca kljuceve svih zapisa u rijecniku pa mozes proc kroz sve jednostavnom petljom (ajme kako ovo lose zvuci na hrvackom :D).

    /* ucitaniDict je NSDictionary ucitan iz .plist-a */ NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"docName" ascending:YES]; NSArray *sviKljucevi = [ucitaniDict allKeys]; NSMutableDictionary *sortiraniDict = [NSMutableDictionary dictionary]; NSArray *sortiraniArray; for (int i = 0; i < [sviKljucevi count]; i++) { sortiraniArray = [[ucitaniDict objectForKey:[sviKljucevi objectAtIndex:i]] sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]]; [sortiraniDict setObject:sortiraniArray forKey:[sviKljucevi objectAtIndex:i]]; } [sortDescriptor release];

    Stvarno je nevjerojatno glupo ovo formatiranje koda :/

    Post edited by ficho at 2011-01-18 20:23:04
    SMRT VANILIJI, SLOBODA FORUMASIMA!
  • Meni ovo ne djeluje baš... Prvo stvoriš taj sortirani array a onda u dictionary dodaješ descriptor.

    Ali sve je to manji problem: meni nije baš bistro što u originalnoj poruci znači "sortirati dictionary po abecedi". Moram priznati da ne znam kao ti ficho čitati između redova.

  • Ups, valjda mi je Xcode auto-completeao sortDescriptor umjesto sortiraniSection, a nisam provjeravao. Sad sam ispravio i usput malo uredio kod.

    I ne zeli on sortirat dictionary po abecedi, nego arreyeve koji su u tom dictionaryu.

    I da, vjerojatno bi se taj plist dao nekako pametnije rijesit. Za pocetak da root item bude array, a ne dictionary. Al tesko je ovako na pamet davat savjete.

    Post edited by ficho at 2011-01-18 19:44:31
    SMRT VANILIJI, SLOBODA FORUMASIMA!
  • O.K., da pokusam malo razjasniti stvari. U mojoj aplikaciji je tabela sa vise od 200 proizvoda. Ti proizvodi moraju biti razvrstani po sekcijama(sections), 3 ili 50 uopce nije bitno. Da bih dao ime sekciji to u .plist u mom slucaju mora biti array. I taj array je odmah ispod root koji je dictionary. Dva nivoa ispod root(jedan nivo ispod array koji je ime sekcije) je item 1 - NOVI dictionary koji sadrzi tri para key-value i to su stringovi. Ti strings su mi potrebni zato sto u tabeli imam red koji sadrzi ime proizvoda i malu fotografiju, a treci string je ime dokumenta koji se otvara u DetailView sa opisom datog proizvoda. Onda dolazi item 2, item 3 itd. i to su sve redovi u tabeli(row in section) i NJIH bi htio razvrstati po abecedi. Section sam uspio razvrstati ali redove nisam. Ako neko ima bolju ideju kako strukturirati .plist a da mogu dati imena sekcijama i da to odgovara mojim potrebama molim da objavi komentar. Imam radnu verziju aplikacije bez sections koja radi odlicno ali je neupotrenljiva zbog kolicine proizvoda. PS. formatiranje na ovom forumu ne radi ili ga ja neznam koristiti pa ne mogu vizualno prikazati .plist a ni kod. Pozdrav

    Post edited by feinstimmer at 2011-01-19 07:36:38
  • Moras stavit kod izmedu 2 backtick znaka.

    http://img7.imageshack.us/img7/5494/screenshot20110119at407.png

    A plist mozes jednostavno stavit screenshot Property List Editora.

    feinstimmer said: Onda dolazi item 2, item 3 itd. i to su sve redovi u tabeli(row in section) i NJIH bi htio razvrstati po abecedi. Section sam uspio razvrstati ali redove nisam.

    Pa ovaj kod sto sam ti gore dao radi tocno to.

    SMRT VANILIJI, SLOBODA FORUMASIMA!
  • Ficho, hvala na code, a .plist je tocno onakva kakvu si je pokazao. Tvoj prvi kod radi super, sve se sortira kako treba. Ali mi se jos uvijek u DetalView otvaraju pogresni dokumenti. Upravo pokusavam prokljuviti zasto.

  • Ako ti nije problem zazipaj primjer plista i primjer projekta s problematicnim kodom pa posalji na mail da pogledam. filip@me.com

    SMRT VANILIJI, SLOBODA FORUMASIMA!
  • Ova cijela stvar postaje zanimljiva.

    Iako bih radije da postoji konkretan primjer sa realnim imenima, a ne apstraknim nazivima. Meni se čini da možda treba sortirati i ove grupe (sectione) i unutar njih nazive artikala.

    Tako da ako se u fileu fizički nalazi grupa životinje ispred automobila, onda u tabeli sve automobile treba strpati ispred životinja, a opet unutar životinja mačke bi trebale biti ispred žirafa, a unutar auti alfa prije škode.

    Baš nemam iskustva sa sortiranjem po ključu unutar dictionaryja, ali meni se nekako čini da bi za sortiranje niza dictova trebala varijanta koja koristi i custom selector, npr. ovo:

    "+(id)sortDescriptorWithKey:(NSString *)key ascending:(BOOL)ascending selector:(SEL)selector"

    gdje je selektor metoda koja čupa neki string iz dictionaryja i radi komparaciju stringova. Ne znam, možda je ovaj key-value coding pametan da to obavi i sam pa taj selector nije potreban, ali ako je onda bi ovo bilo najjednostavnije rješenje.

    Post edited by IgorD at 2011-01-19 17:16:34
  • Pa ovaj kod koji sam napisao i sortira sectione, to je bila ideja. Mislim da se sva trojica medusobno bas i ne kuzimo :D

    SMRT VANILIJI, SLOBODA FORUMASIMA!
  • Ovaj forum je fakat fora. Gornji post sam napisao u 23:02, a onda sam ga editirao isti dan u 17:16.

    Da se vratim, vrlo vjerojatno da se ne kužimo. Zato sam i napisao da bi bilo dobro da je bar u grubo nacrtao file sa konkretnim podacima... ili želiš reči da stvar sasvim dobro radi i sa usporedbom ključeva unutar dictionarija?

    Post edited by IgorD at 2011-01-19 17:32:44
  • Ne sortira se dictionary, nego arrayevi koji su u njemu.

    SMRT VANILIJI, SLOBODA FORUMASIMA!
  • ... koji sadrže dictionaryje.

    Zato sam i pitao, da li stvar radi sa sortiranjem niza dictionaryja?

  • Probao sam neki kod poslati pa mi ne ide. Možda sam uspio u kodu stvoriti ovo što on ima u fajlu, možda nisam. Uglavnom, dva arraya koja sam gurnuo u dva dictionarryja, pa sve to u jedan array.

    Najprije sam sortirao te dictionarryje, pa pojedine arrayove i to izgleda da ispisuje ok, ali ne znam postati kod.

    Nekom drugom prilikom...

    Post edited by IgorD at 2011-01-19 19:02:21
  • proba = 1;

    Post edited by IgorD at 2011-01-19 19:04:08
  • Aha, izgleda da ako ima puno koda onda ne radi. Do određenog broja linija radi.

    Cool!

  • Part 1:

    NSComparisonResult compare (NSString *first, NSString *second, void *context) { return [first compare:second]; }

    Post edited by IgorD at 2011-01-19 19:05:24
  • ....

    Post edited by IgorD at 2011-01-19 19:07:19
  • Nisam siguran koju varijantu od gore ponuđenih, plus onda bih ga morao nekako učitatati. :)

    Sad sam napravio sve manualno u kodu i vidio da tvoja metoda radi. Dakle, ok ti je gore prijedlog iako nisam siguran da se slažemo oko toga što sve treba sortirati. Zato sam i napravio ovaj primjer koji sortira na dva nivoa, ali ga ne mogu ovdje postati.

    Nego, ima jedan drugi sajt, pa sam tamo otvorio temu: Sortiranje nizova...

    Rezultat mog koda je ovo:

    *** UNSORTED ***

    --- Section: životinje ---

    Item 0: zebra

    Item 1: krava

    --- Section: automobili ---

    Item 0: volvo

    Item 1: alfa

    *** SORTED ***

    --- Section: automobili ---

    Item 0: alfa

    Item 1: volvo

    --- Section: životinje ---

    Item 0: krava

    Item 1: zebra

    To me zapravo zanimalo, što sve treba sortirati, sectione, pojedine stavke unutar njih ili sve?

    Post edited by IgorD at 2011-01-19 19:42:38
  • ficho, preradjivao sam app po tvom savjetu pa se zato nisam dugo javljao. Samo da kazem da tvoj kod radi sve je super sortirano, a sada mi se i pravi file-ovi otvaraju. Problem je bio sto sam za dva TableView-a koristio isti DetailView i tu je bio konflikt sa imenima kljuceva. Pozdrav i jos jednom puno hvala.