2010-01-06 4 views
2

MISE À JOUR:JSON-cadre: EXC_BAD_ACCESS sur stringWithObject

Je trouve que la raison de l'erreur précédente était une erreur dans la documentation.

La méthode doit être nommé proxyForJson, pas jsonProxyObject ...

Mais je suis toujours bloqué, cependant.

Je reçois maintenant une erreur EXC_BAD_ACCESS dans stringWithObject où. Des indices?


MISE À JOUR 2:

Ma mise en œuvre de proxyForJson est une coupe-n-coller à partir de là la documentation:

- (id)proxyForJson { 
    return [NSDictionary dictionaryWithObjectsAndKeys: 
      Navn, @"Navn", 
      Adresse, @"Adresse", 
      Alder, @"Alder", 
      nil]; 
} 

Essayer de faire le travail de sérialisation JSON pour mon habitude objective-c classe. Comme je comprends la documentation, json-framework peut sérialiser des objets personnalisés, s'ils implémentent la méthode jsonProxyObject.

J'ai donc cette classe:

@interface MyObject : NSObject { 
    NSString *Name; 
    NSString *Addresse; 
    NSInteger Age; 
} 
@property (nonatomic, retain) NSString *Name; 
@property (nonatomic, retain) NSString *Addresse; 
@property (nonatomic, assign) NSInteger Age; 
- (id)jsonProxyObject; 
@end 

Et j'essaie de sérialiser un tableau avec certains cas, en elle:

[json stringWithObject:list error:&error]; 

Mais tout ce que je reçois est-il erreur suivant:

"La sérialisation JSON n'est pas prise en charge pour MyObject"

Je suppose que le fichier jsonWriter ne peut pas être trouvé ma méthode jsonProxyObject pour une raison quelconque, acheter pourquoi?

Cordialement.

+0

Pourriez-vous montrer votre implémentation de proxyForJason? – Yuji

+0

Bien sûr que je le ferai. Ajouté à la question en ce moment. – Vegar

+0

Avez-vous pu résoudre ce problème? Si oui, pouvez-vous partager la solution? – Hemant

Répondre

0

Avez-vous essayé d'activer NSZombies et MallocStackLogging dans votre volet Infos exécutables pour vérifier la source de EXC_BAD_ACCESS? Sinon, vous pouvez essayer ceci et vérifier la sortie de la console. EXC_BAD_ACCESS est souvent une erreur causée par la libération excessive d'un objet quelque part.

+0

MallocStackLogging affiche les lignes suivantes dans la console: Json testing (22492) malloc: enregistrement des piles malloc sur le disque à l'aide de l'enregistreur standard Json testing (22492) malloc: le processus 22451 n'existe plus, les journaux de pile sont supprimés de/tmp/stack-logs .22451.Json testing.ms0Jvs.index JSON testing (22492) malloc: les journaux de pile sont écrits dans /tmp/stack-logs.22492.Json testing.JhgUjE.index Vous ne pouvez rien extraire des journaux de pile. NSZombies ne semble pas faire la moindre différence. – Vegar

+0

Hm ... Je ne suis pas sûr de la façon dont vous avez utilisé l'option malloc_history. Essayez d'exécuter l'application en mode débogage, attendez qu'elle s'arrête (l'erreur se produit) - ne terminez pas l'application, car elle terminera le processus désormais, ouvrez la fin du terminal entrez: malloc_history PID MA, où PID est l'ID du processus et MA l'adresse mémoire (comme 0xa4e10). À peu près le dernier objet mentionné devrait avoir causé le problème. – ff10

+0

J'ai ajouté MallocStackLogging = YES aux options d'environnement. Taper malloc_history dans le terminal ne me donne pas grand chose non plus. Je ne suis pas sûr d'avoir le bon PID et addr, cependant. J'ai utilisé le PID que j'ai trouvé dans le moniteur d'activité (pour les tests JSON, pas pour le simulateur de pont). Pour l'addr, j'ai utilisé une valeur trouvée dans le titre des débogueurs: 'asm CFRetain 0x01b75900: json testing - Debugger' – Vegar

0

Je ne suis pas sûr que ce soit la bonne chose à faire, mais la définition de la classe comme suit, résout le problème:

@interface MyObject : NSObject { 
    NSString *Name; 
    NSString *Addresse; 
    NSInteger *Age; 
} 

@property (nonatomic, retain) NSString *Name; 
@property (nonatomic, retain) NSString *Addresse; 
@property (nonatomic, retain) NSInteger *Age; 

- (id)jsonProxyObject; 

@end 

initialisation Ensuite, la variable:

Age = [[NSNumber alloc] initWithInt:32]; 
0

En NSString, il n'y a pas de méthode stringWithObject:. Vous devriez essayer d'utiliser stringWithFormat: à la place.