Benvenuto Visitatore ( Log In | Registrati )
![]() ![]() |
14 Mar 2008, 21:56
Messaggio
#1
|
|
|
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) |
|
|
|
|
|
|
|
15 Mar 2008, 00:07
Messaggio
#2
|
|
|
Level 3/11 ![]() ![]() ![]() Gruppo: Forum User + Messaggi: 119 Iscritto il: 11-July 07 Utente Nr.: 8.450 |
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 |
|
|
|
15 Mar 2008, 01:32
Messaggio
#3
|
|
|
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) |
|
|
|
|
19 Mar 2008, 23:27
Messaggio
#4
|
|
|
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) |
|
|
|
|
20 Mar 2008, 01:25
Messaggio
#5
|
|
|
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 -------------------- |
|
|
|
|
20 Mar 2008, 12:01
Messaggio
#6
|
|
|
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) |
|
|
|
|
20 Mar 2008, 12:57
Messaggio
#7
|
|
|
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 -------------------- |
|
|
|
|
20 Mar 2008, 13:29
Messaggio
#8
|
|
|
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) |
|
|
|
|
20 Mar 2008, 15:51
Messaggio
#9
|
|
|
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 -------------------- |
|
|
|
|
22 Mar 2008, 17:14
Messaggio
#10
|
|
|
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 -------------------- |
|
|
|
|
22 Mar 2008, 18:14
Messaggio
#11
|
|
|
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 |
|
|
|
|
23 Mar 2008, 11:14
Messaggio
#12
|
|
|
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) |
|
|
|
|
![]() ![]() |
| Titolo discussione | Risposte | Autore discussione | Visite | Ultima azione | |||
|---|---|---|---|---|---|---|---|
![]() |
4 | NSLuca | 203 | 4 August 2008 - 15:25 Ultimo messaggio di: NSLuca |
|||
![]() |
11 | marg | 888 | 2 July 2008 - 08:11 Ultimo messaggio di: marg |
|||
![]() |
4 | germinara | 220 | 22 June 2008 - 14:29 Ultimo messaggio di: sirguich_ |
|||
![]() |
2 | sirguich_ | 201 | 9 June 2008 - 23:14 Ultimo messaggio di: sirguich_ |
|||
![]() |
10 | Ale93 | 261 | 1 June 2008 - 23:15 Ultimo messaggio di: Ale93 |
|||
![]() |
2 | nutsmuggler | 333 | 12 March 2008 - 16:17 Ultimo messaggio di: nutsmuggler |
|||
![]() |
10 | marg | 370 | 25 February 2008 - 22:10 Ultimo messaggio di: marg |
|||
![]() |
5 | marg | 350 | 7 February 2008 - 16:16 Ultimo messaggio di: poweruser |
|||
![]() |
2 | simotessa | 406 | 25 January 2008 - 15:23 Ultimo messaggio di: simotessa |
|||
![]() |
12 | brubeck | 534 | 13 January 2008 - 15:11 Ultimo messaggio di: brubeck |
|||
![]() |
9 | Cpu86 | 416 | 13 January 2008 - 12:04 Ultimo messaggio di: Cpu86 |
|||
![]() |
3 | simotessa | 418 | 6 January 2008 - 22:00 Ultimo messaggio di: Cpu86 |
|||
|
Versione Lo-Fi | Oggi è il: 22 November 2008 - 19:31 |
| IP.Board Skin Developed By Creative Networks | ||