IPB     Il futuro di Tevac dipende da te!  

Benvenuto Visitatore ( Log In | Registrati )

  · · · · · · · · · · · ·
Reply to this topicStart new topic
> [Cocoa] NSData to NSString, NSData to NSImage
Cpu86
messaggio 14 Mar 2008, 21:56
Messaggio #1


Level 3/11
***

Gruppo: Forum User +
Messaggi: 206
Iscritto il: 24-August 06
Da: Varese
Utente Nr.: 6.539



Buonasera,
spesso mi sono scontrato sul passaggio da NSData a NSString e da NSData a NSImage con i rispettivi metodi messi a disposizione da NSString e NSImage.
Non ho mai avuto problemi fino ad adesso. Ora leggo degli oggetti NSData da un file .plist, i quali dovrebbero rappresentare un' immagine e una stringa, ma quello che ottengo e' un nil pointer, cioe' non crea i rispettivi oggetti.

L'oggetto NSData non e' vuoto ma contiene informazioni.

Il file .plist in questione e' com.apple.recentitems.plist

A qualcuno e' capitato qualcosa del genere?

Cpu86


--------------------
L'informatica non riguarda i computer più di quanto l'astronomia riguardi i telescopi. (Edsger Wybe Dijkstra)

« Tra molto tempo- per esempio tra diecimila anni- non c'è dubbio che la scoperta delle equazioni di Maxwell sarà giudicato l'evento più significativo del XIX secolo. La guerra civile americana apparirà insignificante e provinciale se paragonata a questo importante evento scientifico della medesima decade. »
(Richard Feynman)
Go to the top of the page
 
+Quote Post
spiderbat
messaggio 15 Mar 2008, 00:07
Messaggio #2


Level 3/11
***

Gruppo: Forum User +
Messaggi: 119
Iscritto il: 11-July 07
Utente Nr.: 8.450



CITAZIONE(Cpu86 @ 14 Mar 2008, 20:56) *
Buonasera,
spesso mi sono scontrato sul passaggio da NSData a NSString e da NSData a NSImage con i rispettivi metodi messi a disposizione da NSString e NSImage.
Non ho mai avuto problemi fino ad adesso. Ora leggo degli oggetti NSData da un file .plist, i quali dovrebbero rappresentare un' immagine e una stringa, ma quello che ottengo e' un nil pointer, cioe' non crea i rispettivi oggetti.

L'oggetto NSData non e' vuoto ma contiene informazioni.

Il file .plist in questione e' com.apple.recentitems.plist

A qualcuno e' capitato qualcosa del genere?

Cpu86

Scusa, ma non capisco esattamente a che punto la cosa va in buca:
1- con quale/i metodo/i leggi il file .plist?
2- da quello che dici sembrerebbe che quando cerchi di ottenere il puntatore agli oggetti NSData letti dalla plist becchi un puntatore a 0, ma se questo è vero come fai a dire che l'oggetto NSData non è vuoto? Intendi quello nel file su disco?

Ciao
Andrea

Go to the top of the page
 
+Quote Post
Cpu86
messaggio 15 Mar 2008, 01:32
Messaggio #3


Level 3/11
***

Gruppo: Forum User +
Messaggi: 206
Iscritto il: 24-August 06
Da: Varese
Utente Nr.: 6.539



Il file plist in questione e' un dizionario. Ogni voce del dizionario contiene a sua volta un altro dizionario. Quest'ultimo dizionario ha una voce che e' un array. Ogni elemento di questo array e' ancora un dizionario con le seguenti voci---->tipi:

Alias-----> Data
Icon-----> Data
Name-----> String

Io recuperto l'oggetto assegnato alla voce "Icon", poi costruisco l'immagine:

CODICE
image = [[NSImage alloc] initWithData:[[tempArray objectAtIndex:j] objectForKey:@"Icon"]];


dove tempArray e' l'array ricavato secondo lo schema descritto sopra. Image risulta nil.

Riguardo al Alias:

CODICE
string = [[NSString alloc] initWithData:[[tempArray objectAtIndex:j] objectForKey:@"Alias"] encoding:4];


e string risulta nil anche provando a cambiare enconding.

Marco


--------------------
L'informatica non riguarda i computer più di quanto l'astronomia riguardi i telescopi. (Edsger Wybe Dijkstra)

« Tra molto tempo- per esempio tra diecimila anni- non c'è dubbio che la scoperta delle equazioni di Maxwell sarà giudicato l'evento più significativo del XIX secolo. La guerra civile americana apparirà insignificante e provinciale se paragonata a questo importante evento scientifico della medesima decade. »
(Richard Feynman)
Go to the top of the page
 
+Quote Post
Cpu86
messaggio 19 Mar 2008, 23:27
Messaggio #4


Level 3/11
***

Gruppo: Forum User +
Messaggi: 206
Iscritto il: 24-August 06
Da: Varese
Utente Nr.: 6.539



Ho fatto delle prove, anche con CFData e CFString, ed ho scoperto che i tipi <data> in un plist sono codificati in base64. Ne framework Cocoa e Carbon non c'e' niente, per lo meno cosi' mi risulta, per base64.
Per la rete si trovano dei metodi per NSData ed NSString ed addirittura un sorgente c per il decoding.
Tra tutti quelli che ho provato, nessuno pare funzionare.

Vorrei sapere se qualcuno ha avuto esperienze a buon fine in campo base64.

Cpu86


--------------------
L'informatica non riguarda i computer più di quanto l'astronomia riguardi i telescopi. (Edsger Wybe Dijkstra)

« Tra molto tempo- per esempio tra diecimila anni- non c'è dubbio che la scoperta delle equazioni di Maxwell sarà giudicato l'evento più significativo del XIX secolo. La guerra civile americana apparirà insignificante e provinciale se paragonata a questo importante evento scientifico della medesima decade. »
(Richard Feynman)
Go to the top of the page
 
+Quote Post
nutsmuggler
messaggio 20 Mar 2008, 01:25
Messaggio #5


Level 6/11
******

Gruppo: Forum User +
Messaggi: 1.571
Iscritto il: 1-September 04
Da: Verona
Utente Nr.: 2.260



Magari ti dico un'ovvietà ma, se non usi il GC, sei sicuro di non aver rilasciato un'istanza di troppo, o di aver ritenuto gli oggetti necessar, o di non aver usato un puntatore che poi hai modificato? Il debugger cosa dice?
Sono stupidate, ma al 90% gli errori che faccio sono di questo tipo.
Ciao,
Davide


--------------------
Vieni a trovarmi sul mio blog e su flickr.
Go to the top of the page
 
+Quote Post
Cpu86
messaggio 20 Mar 2008, 12:01
Messaggio #6


Level 3/11
***

Gruppo: Forum User +
Messaggi: 206
Iscritto il: 24-August 06
Da: Varese
Utente Nr.: 6.539



Non uso GC.

Il codice appare cosi':
CODICE
recentItems = [NSDictionary dictionaryWithContentsOfFile:[NSString stringWithFormat:@"%@/Library/Preferences/com.apple.recentitems.plist",NSHomeDirectory()]];
    dataEncoded = [[[[recentItems objectForKey:@"Documents"] objectForKey:@"CustomListItems"] objectAtIndex:0] objectForKey:@"Icon"];


Ora, gli esempi che si trovano sulla rete trattano con degli oggetti NSString. Passando da NSData a NSString, il metodo di NSString vuole l'encoding, quindi penso che gia' facendo questo passaggio si perde qualcosa. Altro modo che mi e' venuto in mente e' quello di scrivere su file il contenuto di NSData e poi instanziare un oggetto NSString col contenuto di tale file. Ma anche questa cosa non funziona.

Cpu86


--------------------
L'informatica non riguarda i computer più di quanto l'astronomia riguardi i telescopi. (Edsger Wybe Dijkstra)

« Tra molto tempo- per esempio tra diecimila anni- non c'è dubbio che la scoperta delle equazioni di Maxwell sarà giudicato l'evento più significativo del XIX secolo. La guerra civile americana apparirà insignificante e provinciale se paragonata a questo importante evento scientifico della medesima decade. »
(Richard Feynman)
Go to the top of the page
 
+Quote Post
nutsmuggler
messaggio 20 Mar 2008, 12:57
Messaggio #7


Level 6/11
******

Gruppo: Forum User +
Messaggi: 1.571
Iscritto il: 1-September 04
Da: Verona
Utente Nr.: 2.260



Sto riprendendo in mano cocoa dopo 2 anni, e NSData lo devo ancora ripassare, ma a naso mi viene in mente questa cosa.
Forse per leggere i dati devi prima creare un oggetto NSData con un metodo tipo

CODICE
[NSData dataWithData:[[[[recentItems objectForKey:@"Documents"] objectForKey:@"CustomListItems"] objectAtIndex:0] objectForKey:@"Icon"]];


Nel caso i dati nella PList non fossero proprio NSData, usa un altro metodo costruttore, fra quelli indicati qui.
Ripeto, ti rispondo a naso, ma credo che sia necessario istanziare l'oggetto in questo modo.
Tienici aggiornati!
Davide

Messaggio modificato da nutsmuggler il 20 Mar 2008, 12:58


--------------------
Vieni a trovarmi sul mio blog e su flickr.
Go to the top of the page
 
+Quote Post
Cpu86
messaggio 20 Mar 2008, 13:29
Messaggio #8


Level 3/11
***

Gruppo: Forum User +
Messaggi: 206
Iscritto il: 24-August 06
Da: Varese
Utente Nr.: 6.539




Ho provato questo da terminale:
CODICE
openssl base64 -d -in in.txt -out out.txt


dove in.txt e' un file col contenuto di NSData codificato in base64 (stando a quello che dice la documentazione).

il file out.txt risulta sempre vuoto.

Cpu86


--------------------
L'informatica non riguarda i computer più di quanto l'astronomia riguardi i telescopi. (Edsger Wybe Dijkstra)

« Tra molto tempo- per esempio tra diecimila anni- non c'è dubbio che la scoperta delle equazioni di Maxwell sarà giudicato l'evento più significativo del XIX secolo. La guerra civile americana apparirà insignificante e provinciale se paragonata a questo importante evento scientifico della medesima decade. »
(Richard Feynman)
Go to the top of the page
 
+Quote Post
nutsmuggler
messaggio 20 Mar 2008, 15:51
Messaggio #9


Level 6/11
******

Gruppo: Forum User +
Messaggi: 1.571
Iscritto il: 1-September 04
Da: Verona
Utente Nr.: 2.260



Qui ci vorrebbe Marco Coisson... Marco? Ad ogni modo, dopo, o domani, se ho tempo provo a replicare la situaizone, è difficile capire senza provare sulla propria pelle.
Davide


--------------------
Vieni a trovarmi sul mio blog e su flickr.
Go to the top of the page
 
+Quote Post
poweruser
messaggio 22 Mar 2008, 17:14
Messaggio #10


MacInATopic
Gruppo icone

Gruppo: Root Admin
Messaggi: 24.319
Iscritto il: 27-July 03
Da: Maglie (LE)
Utente Nr.: 440



Dico una banalità: non è che magari è corrotto il file plist iniziale?
Prova a verificarlo con
CODICE
plutil -lint nomefile.plist
(anche se non sono sicuro che controlli anche la codifica dei dati).

Ciao
Paolo


--------------------
Paolo Portaluri

guru, n: A computer owner who can read the manual.
Go to the top of the page
 
+Quote Post
Marco Coïsson
messaggio 22 Mar 2008, 18:14
Messaggio #11


life, n: a whim of several billion cells to be you for a while
***********

Gruppo: Supporter
Messaggi: 9.337
Iscritto il: 18-May 03
Da: Torino
Utente Nr.: 65



Ecco il mio codice di prova:
CODE
#import <Cocoa/Cocoa.h>
#import <stdio.h>

NSAutoreleasePool   *ap;

int main(int argc, char *argv[])
{    
    NSDictionary    *recentItems;
    NSData          *dataEncoded;
    NSImage         *icona;
    
    ap=[[NSAutoreleasePool alloc] init];
    recentItems=[NSDictionary dictionaryWithContentsOfFile:[NSString stringWithFormat:@"%@/Library/Preferences/com.apple.recentitems.plist",NSHomeDirectory()]];
    dataEncoded = [[[[recentItems objectForKey:@"Documents"] objectForKey:@"CustomListItems"] objectAtIndex:0] objectForKey:@"Icon"];
    NSLog(@"L'oggetto non e' vuoto: %@",[dataEncoded description]);
    icona=[[NSImage alloc] initWithData:dataEncoded];
    NSLog(@"L'icona e' larga %g e alta %g",[icona size].width,[icona size].height);
    [icona release];
    [ap release];
    return(0);
}

Come da voi già verificato, l'oggetto NSData è pieno (e contiene la cosa giusta), mentre nel passaggio all'oggetto NSImage qualche cosa va storto. Non è che magari NSData non contiene un'immagine, ma un qualche riferimento a qualche cosa che poi a sua volta punta all'immagine in questione?


--------------------
Marco Coïsson
http://homepage.mac.com/marco_coisson

L'atomo divisibile: podcast gratuito di divulgazione scientifica.

X come Macintosh
Go to the top of the page
 
+Quote Post
Cpu86
messaggio 23 Mar 2008, 11:14
Messaggio #12


Level 3/11
***

Gruppo: Forum User +
Messaggi: 206
Iscritto il: 24-August 06
Da: Varese
Utente Nr.: 6.539



CITAZIONE(Marco Coïsson @ 22 Mar 2008, 17:14) *
Non è che magari NSData non contiene un'immagine, ma un qualche riferimento a qualche cosa che poi a sua volta punta all'immagine in questione?


Effettivamente non contiene l'immagine fa un alias della medesima, facendolo precedere da una struttura particolare del tipo ImgR ecc....

Infatti poi ho postato sulla mailing list di cocoa e ho scoperto che il contenuto di "Alias" e "Icon" non sono codificati in base64 ma sono degli alias di cui si puo' recuperare il path con FSRef.
Ho trovato in rete NDAlias http://homepage.mac.com/nathan_day/pages/source.xml, il quale propone un'interfaccia tra le funzioni Carbon e Cocoa.

Marco


--------------------
L'informatica non riguarda i computer più di quanto l'astronomia riguardi i telescopi. (Edsger Wybe Dijkstra)

« Tra molto tempo- per esempio tra diecimila anni- non c'è dubbio che la scoperta delle equazioni di Maxwell sarà giudicato l'evento più significativo del XIX secolo. La guerra civile americana apparirà insignificante e provinciale se paragonata a questo importante evento scientifico della medesima decade. »
(Richard Feynman)
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic

 

Collapse

> 

    Titolo discussione Risposte Autore discussione Visite Ultima azione
No New Posts   4 NSLuca 203 4 August 2008 - 15:25
Ultimo messaggio di: NSLuca
No new   11 marg 888 2 July 2008 - 08:11
Ultimo messaggio di: marg
No New Posts   4 germinara 220 22 June 2008 - 14:29
Ultimo messaggio di: sirguich_
No New Posts   2 sirguich_ 201 9 June 2008 - 23:14
Ultimo messaggio di: sirguich_
No new   10 Ale93 261 1 June 2008 - 23:15
Ultimo messaggio di: Ale93
No New Posts   2 nutsmuggler 333 12 March 2008 - 16:17
Ultimo messaggio di: nutsmuggler
No new   10 marg 370 25 February 2008 - 22:10
Ultimo messaggio di: marg
No New Posts   5 marg 350 7 February 2008 - 16:16
Ultimo messaggio di: poweruser
No New Posts   2 simotessa 406 25 January 2008 - 15:23
Ultimo messaggio di: simotessa
No new   12 brubeck 534 13 January 2008 - 15:11
Ultimo messaggio di: brubeck
No new   9 Cpu86 416 13 January 2008 - 12:04
Ultimo messaggio di: Cpu86
No New Posts   3 simotessa 418 6 January 2008 - 22:00
Ultimo messaggio di: Cpu86

Modalità di visualizzazione: Normale · Passa a: Lineare · Passa a: Outline


RSS Versione Lo-Fi Oggi è il: 22 November 2008 - 19:31
IP.Board Skin Developed By Creative Networks