0

このコード行で、実行時にエラーがスローされました。

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

kFieldCurrency は、次のように定義される定数です。

#define kValueCurrency          @"currency"

theObject の値を印刷すると、次の出力が提供されます。 theObject の説明の印刷:

<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;
})

エラーメッセージは次のとおりです。

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

と:

*** 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

私が気づいたのは、NSObjectNSManagedObject継承元の)実装+copyWithZone:が none-copyWithZone:です。このエラー メッセージは、copyWithZone: がクラス自体ではなく、クラスのインスタンスに対して送信されたことを示しています。

theObjectローカル メソッドのパラメーターです。

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

そして、デバッガーの出力で、実際にそのタイプであることがわかります。そして、それはcurrencyとは異なる性質を持っていますnil

何か案は?より多くのコードを提供できることをうれしく思いますが、どのスニプレットに関心を持たせることができるかはまだわかりません.

これは、現在流通しているベータ版ではなく、現在の xcode およびコパイラー バージョンに基づく一般的に利用可能な SDK 6.1 です。

4

1 に答える 1

3

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>";
    ...

「通貨」は別のエンティティとの関係のようですので、

[theObject valueForKey:kFieldCurrency]

メソッドが期待するように、文字列ではなく、そのエンティティのオブジェクトを返しますsetCurrencySymbol:

おそらくあなたは似たようなものが欲しい

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

「シンボル」が「通貨」エンティティの文字列属性であると仮定します。

于 2013-08-12T21:19:20.730 に答える