Corsi di programmazione web e mobile online
Pagina 1 di 2 12 UltimaUltima
Risultati da 1 a 10 di 12

Discussione: Errore con un array -> UITableView

  1. #1
    Junior Member
    Data Registrazione
    Jul 2013
    Messaggi
    9

    Question Errore con un array -> UITableView

    Corso online di programmazione android e java
    Ciao a tutti,

    premetto d'essere proprio agli inizi della programmazione per iOS e ne so ben poco... Sto però provando a vedere se riesco a creare un'app che sostanzialmente svolga gli stessi compiti di un sito che a breve lancerò e ho incontrato questo problema che proprio non riesco a risolvere: sostanzialmente alla pressione di un tasto in una View viene passato un array ad una seconda view, array di stringhe che viene mostrato semplicemente in una tabella (in questa seconda view). Dalla seconda view c'è poi un tasto per tornare alla view precedente, notare che l'array di stringhe potrebbe cambiare ogni volta (dipende da un campo di testo, ma penso sia poco importante, o almeno credo!) e il problema che incontro è proprio quando effettuo più volte questo passaggio dalla prima view alla tabella che è nella seconda view. Faccio un esempio: schiaccio il tasto una prima volta e appare nella tabella un valore (ed è esatto), torno alla pagina principale, lo schiaccio una seconda volta e quando dovrebbero apparire 4 valori nella tabella ne appare solo uno! Poi torno indietro, rischiaccio il tasto e gli stessi 4 valori che dovevano apparire prima ora appaiono giusti! Altro problema che penso proprio sia correlato: se ora appaiono i 4 valori, torno indietro di nuovo e passo un nuovo array alla tabella (contenente una sola stringa) l'app crasha. Ora, ho cercato un bel po' in internet prima di scrivere in questo forum e penso d'aver individuato il problema nella seguente riga dell'app:

    Codice:
    Solo gli utenti registrati possono visualizzare il codice. Only registered members can view code.
    Sostanzialmente, a quanto leggo online, [indexPath row] non segna più il valore che dovrebbe segnare al momento dell'esecuzione e quando deve passare da 0 a 3 (array con 4 stringhe) mostra solo lo 0, che è il risultato dell'array passato poco prima, e quando invece l'array che deve mostrare è formato da solo una stringa va a cercare anche quelle con objectAtIndex pari a 1, 2 e 3, elementi che ovviamente non esistono e che fanno crashare l'app. Questa è una mia supposizione, nata dal fatto che quando provo a lanciare l'app facendo mostrare immediatamente la tabella con 4 valori non ha problemi, ma se prima gli faccio mostrare la tabella con un valore e poi quella con 4 valori ne mostra solo 1. -.-

    So che mi sono espresso forse non nella maniera migliore ma spero riusciate ad aiutarmi... Posto anche ciò che appare quando l'app crasha:

    Codice:
    Solo gli utenti registrati possono visualizzare il codice. Only registered members can view code.
    (in questo caso penso cerchi di mostrare un elemento in posizione 1 nell'array quando invece l'array è formato da un solo elemento!)

    Se sono necessari altre parti del codice ditemelo please!

    Grazie!

  2. #2
    Senior Member L'avatar di Neo
    Data Registrazione
    Jul 2010
    Messaggi
    741
    mmm non riesco a capire cosa vuoi fare e cosa hai fatto.. posta un po' di codice.. spiega come hai organizzato il tutto..

  3. #3
    Junior Member
    Data Registrazione
    Jul 2013
    Messaggi
    9
    D'accordo, ho pubblicato pochissime parti sperando fosse un problema comune avendo trovato altre domande del genere su internet, rimedio subito.

    Ho due view (in un solo .xib), in una un campo di testo e un bottone, premendo sul bottone viene richiamato questo:

    Codice:
    Solo gli utenti registrati possono visualizzare il codice. Only registered members can view code.
    search.php sostanzialmente mi restituisce solo del testo che poi io rielaboro ed inserisco nell'array risultati. Questo array deve poi essere mostrato nella seconda view, chiamata searchpage (e in cui è presente una tabella e un bottone) e riguardo questa view ho le seguenti parti di codice che penso possano interessare il problema:

    Codice:
    Solo gli utenti registrati possono visualizzare il codice. Only registered members can view code.
    E il tasto per tornare alla pagina iniziale:

    Codice:
    Solo gli utenti registrati possono visualizzare il codice. Only registered members can view code.
    Esiste sicuramente un metodo più veloce per fare questa cosa, ma oramai mi ero buttato in questo e volevo vedere se riuscivo a farlo funzionare... Immagino che il problema riguardi quel

    stringa = [risultati objectAtIndex:[indexPath row]];

    E il problema lo riespongo in breve: se faccio una ricerca che restituisce un solo valore esso viene mostrato nella tabella, ma se subito dopo torno alla pagina principale e faccio un'altra ricerca (che dovrebbe restituirmi 4 risultati) me ne esce soltanto uno! E se invece faccio una ricerca subito che dovrebbe restituirmi 4 risultati essi vengono mostrati giusti e se ne faccio subito dopo un'altra che dovrebbe restituirmene 1 l'app crasha. Sostanzialmente il problema è il crash e questo mostrare solo un risultato quando invece dovrebbero esserci immediatamente tutti e 4!

    Grazie mille!

  4. #4
    Administrator L'avatar di ignazioc
    Data Registrazione
    Jul 2010
    Messaggi
    3,912
    vorrei aiutarti ma non c'ho capito molto :|
    Intanto una cosa...perché tutta questa fatica del parsing? esistono degli standard che sono l'xml e - molto meglio- il json. Perché non ti fai mandare delle risposte in questo formato? vivresti mooolto più felice

    poi ti consiglio di fare questo lavoro con due viewcontroller separati, la gestione dovrebbe venirti molto più semplice.

    Per quanto rigaurda il tuo codice, a parte tutta la parte di parsing che mi è piuttosto oscura non mi pare ci siano errori.
    Tu da una parte fai delle ricerche, inserendo poi i singoli prodotti nell'array "risultati", poi quando mostri la tabella ciasun prodotto lo devi seprare in codice/foto etc quindi il numero di righe della tabella dovrebbe essere il count dell'array "risultati", no? verifica il metodo numberofrowinsection per vedere cosa gli passi.

    ciao.

    La mia libreria su anobii e la wishlist su amazon.co.uk e il mio hosting provider

  5. #5
    Junior Member
    Data Registrazione
    Jul 2013
    Messaggi
    9
    Seguirò sicuramente i consigli riguardo JSON e XML, grazie! Però in questo caso io non capisco proprio dove sbaglio, che sia scritto male come codice per come popolo l'array sono d'accordo, ma perché non dovrebbe funzionare? [risultati count] DOVREBBE essere uguale al numero di righe della tabella ma non lo è! E' proprio questo il problema... numberOfRowInSection ritorna [risultati count], non so che fare e non capisco dove sia il problema... Scritto così dovrebbe funzionare ma quando si effettua più di una ricerca non appare nella tabella ciò che dovrebbe apparire, a volte meno risultati di quelli che dovrebbero uscire (e non è un problema del file php, è un problema della tabella o dell'array, ho controllato) e a volte addirittura crasha tutto... Seguirò anche il consiglio di più view (di fatto io uso più view, intendi più view in .xib separati immagino).

  6. #6
    Administrator L'avatar di ignazioc
    Data Registrazione
    Jul 2010
    Messaggi
    3,912
    Citazione Originariamente Scritto da manzy Visualizza Messaggio
    ... Seguirò anche il consiglio di più view (di fatto io uso più view, intendi più view in .xib separati immagino).
    intendo dire più viewcontroller non più view. Consiglio questo approccio perché riesci a definire meglio le relazioni e quanto e come passare i dati tra un viewcontroller all'altro.

    Sai usare il debug? se metti un breakpoint nel metodo cellforrowatindexapth puoi farti stampare l'array "risultati" così dovresti capire cosa c'è che non va...alla bruta eventualmente metti un NSLog(@"%@", risultati)

    La mia libreria su anobii e la wishlist su amazon.co.uk e il mio hosting provider

  7. #7
    Junior Member
    Data Registrazione
    Jul 2013
    Messaggi
    9
    Citazione Originariamente Scritto da ignazioc Visualizza Messaggio
    Sai usare il debug? se metti un breakpoint nel metodo cellforrowatindexapth puoi farti stampare l'array "risultati" così dovresti capire cosa c'è che non va...alla bruta eventualmente metti un NSLog(@"%@", risultati)
    Con il debug non ho moltissima familiarità, e avevo già tentato di trovare l'errore tramite NSLog nell'array non ci sono errori, viene popolato in maniera giusta ad ogni ricerca che viene effettuata, sia per il contenuto che per il numero dei suoi elementi. So che il metodo che uso per popolare l'array non è il massimo ma l'errore non è lì, c'è un errore nel trasferimento dall'array alla tabella. Ad esempio, (faccio partire il simulatore) se effettuo una ricerca da un risultato NSLog(@"%i",[risultati count]) riporta 1 e nella tabella appare, subito dopo effettuo un'altra ricerca che mi dovrebbe mostrare 4 risultati, lo stesso NSLog mi riporta 4 e nella tabella ne appare uno. Ho provato anche un'altra soluzione che mi pare impossibile non funzioni: al posto di

    stringa = [risultati objectAtIndex:[indexPath row]]; (che io penso d'aver individuato come il punto che mi crea questo errore)

    ho messo un ciclo for che cicla da 0 a ([risultati count]-1) e la variabile i che cicla l'ho messa al posto di [indexPath row], giusto per vedere se così funzionava, ma niente da fare. Il problema non è nell'array, che riporta ad ogni esecuzione il numero giusto di elementi, ma nella tabella, solo che non so proprio che cosa toccare a questo punto...

    Quali altre informazioni posso darvi per risolvere il problema? Ho provato a scandire una stringa (senza che venisse presa da un file php) per vedere se usciva ancora questo problema, ho fatto in modo che l'array avesse prima 2 elementi e poi 3, e quando nella tabella dovevano apparirmene 3 di valori (ovvero alla seconda ricerca) ne apparivano solo 2, precisamente i primi 2 dei 3 che dovevano apparire. -.-

    Non so proprio che fare...

  8. #8
    Junior Member
    Data Registrazione
    Jul 2013
    Messaggi
    9
    Scusate il doppio messaggio, penso d'aver scoperto una cosa interessante, ho provato a mettere un po' di NSLog e ce n'è uno che riporta un valore strano:

    Codice:
    Solo gli utenti registrati possono visualizzare il codice. Only registered members can view code.
    questo mostra 1 appena schiaccio Cerca, poi DI NUOVO 1 quando schiaccio il tasto per tornare alla pagina principale, dopo di che se si rischiaccia "Cerca" modificando la stringa il valore non viene più stampato (e quindi rimane a 1) e giustamente nella tabella appare solo un valore, quello con index=0, la cosa ancora più strana è che schiacciando di nuovo il tasto per tornare alla pagina principale viene stampato in console il valore 4, corrispondente alla seconda ricerca... Non so se mi sono spiegato. Questo è ciò che appare:

    Codice:
    Solo gli utenti registrati possono visualizzare il codice. Only registered members can view code.
    il primo esce quando schiaccio "Cerca", il secondo quando schiaccio il tasto per tornare alla pagina principale, il terzo quando schiaccio il tasto per tornare alla pagina principale dopo la seconda ricerca!

  9. #9
    Administrator L'avatar di ignazioc
    Data Registrazione
    Jul 2010
    Messaggi
    3,912
    che confusione
    sicuramente fai dei giri strani con quell'array ma a guardare solo il codice che hai postato non si capisce l'errore. Se hai voglia togli tutto quello di "delicato" dal progetto e postalo, oppure contattami in privato.

    ciao

    La mia libreria su anobii e la wishlist su amazon.co.uk e il mio hosting provider

  10. #10
    Junior Member
    Data Registrazione
    Jul 2013
    Messaggi
    9
    Corso online di programmazione android e java
    Ti ho contattato in privato!

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •