2013-08-12 5 views
0

j'ai une erreur jeté sur l'exécution dans cette ligne de code:NSManagedObject copyWithZone sélecteur non reconnu

[numberFormatter setCurrencySymbol:[theObject valueForKey:kFieldCurrency]]; 

kFieldCurrency est une constante définie comme suit:

#define kValueCurrency   @"currency" 

Impression de la valeur de theObject fournit cette sortie: Description d'impression de l'objet:

<NSManagedObject: 0x7836bf0> (entity: CustomValue; id: 0x78373d0 <x-coredata://84240925-2D7D-485E-AD9D-8DD48F602C00/CustomValue/p5> ; data: { 
    contract = "0x78e4a20 <x-coredata://84240925-2D7D-485E-AD9D-8DD48F602C00/Contract/p3>"; 
    currency = "0x7839810 <x-coredata://84240925-2D7D-485E-AD9D-8DD48F602C00/Currency/p5>"; 
    dateTimeValue = nil; 
    isChangeableByUser = 1; 
    isListed = 1; 
    listName = GELDWERT; 
    numValue = 10; 
    numberOfDigits = 0; 
    stringValue = nil; 
    tagName = GELDWERT; 
    type = 5; 
}) 

Le message d'erreur est:

-[NSManagedObject copyWithZone:]: unrecognized selector sent to instance 0x7c1c930 

et:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSManagedObject copyWithZone:]: unrecognized selector sent to instance 0x7c1c930' 
*** First throw call stack: 
(0x1959012 0x1690e7e 0x19e44bd 0x1948bbc 0x194894e 0xe77afd 0x28d4d 0x2922f 0x2c53a 0x2d14f 0x2d67a 0x27ecd 0x3a61c7 0x3a6232 0x3a64da 0x3bd8e5 0x3bd9cb 0x3bdc76 0x3bdd71 0x3be89b 0x3bee93 0xc8d83f7 0x3bea88 0x71ae63 0x70cb99 0x3a6dd2 0xc8d012c 0x10763 0x16a4705 0x2c82c0 0x504a64 0x16a4705 0x2c82c0 0x2c8258 0x389021 0x38957f 0x3886e8 0x2f7cef 0x2f7f02 0x2d5d4a 0x2c7698 0x23c5df9 0x23c5ad0 0x18cebf5 0x18ce962 0x18ffbb6 0x18fef44 0x18fee1b 0x23c47e3 0x23c4668 0x2c4ffc 0x289d 0x27c5) 
libc++abi.dylib: terminate called throwing an exception 

Je l'ai remarqué, que NSObject (dont NSManagedObject inherits) implémente +copyWithZone: mais aucun -copyWithZone:. Le message d'erreur indique que copyWithZone: a été envoyé faire une instance de la classe, pas la classe elle-même.

theObject est le paramètre de la méthode locale.

- (NSString *) outputValue: (NSManagedObject *) theObject {...} 

Et vous voyez dans la sortie des débogueurs qu'il est vraiment de ce type. Et il a une propriété currency qui est différente de nil.

Des idées? Je suis heureux de fournir plus de code mais je ne sais pas encore quels sniplets vous pourriez être intéressés.

Ceci est le SDK 6.1 disponible général basé sur les versions actuelles de xcode et de copiler, non des trucs bêta en cours de cerclage.

Répondre

3

Depuis votre sortie NSLog

<NSManagedObject: 0x7836bf0> (entity: CustomValue; id: 0x78373d0 <x-coredata://84240925-2D7D-485E-AD9D-8DD48F602C00/CustomValue/p5> ; data: { 
    contract = "0x78e4a20 <x-coredata://84240925-2D7D-485E-AD9D-8DD48F602C00/Contract/p3>"; 
    currency = "0x7839810 <x-coredata://84240925-2D7D-485E-AD9D-8DD48F602C00/Currency/p5>"; 
    ... 

il semble que la « monnaie » est une relation à une autre entité, de sorte

[theObject valueForKey:kFieldCurrency] 

renverrait un objet de cette entité et non une chaîne, comme prévu par la méthode setCurrencySymbol:.

Peut-être que vous voulez quelque chose de similaire à

[numberFormatter setCurrencySymbol:[theObject valueForKeyPath:@"currency.symbol]]; 

en supposant que « symbole » est un attribut de chaîne de l'entité « Devise ».

+0

Oui, vous avez raison. Comme c'est stupide de moi. Merci. –

+0

@HermannKlecker: Pas de problème, vous êtes les bienvenus! –

+0

Oui. Bien que ce soit une question plutôt stupide je vais le garder dans SO. Le message d'erreur est assez trompeur. Donc d'autres peuvent avoir le même problème et peuvent être trompés aussi. –

Questions connexes