0

ブール値である属性に対して true/false の代わりに null を持つことがあるサービスから戻ってくる JSON があります。このような:

"hide_locations" : null,

この値を受け取るオブジェクトには、次のプロパティがあります。

@property (nonatomic, assign) BOOL hideLocations;

私のマッピングは次のように構成されています。

RKObjectMapping *retVal = [RKObjectMapping mappingForClass:[self class]];
[retVal mapKeyPath:@"hide_locations" toAttribute:@"hideLocations"];

しかし、マッピングを実行すると、RestKit 0.10.3 が次の行でクラッシュします。

[self.destinationObject setValue:value forKeyPath:attributeMapping.destinationKeyPath];

in - (void)applyAttributeMapping:(RKObjectAttributeMapping *)attributeMapping withValue:(id)value

RKObjectMappingOperation.m で次のエラーが発生しました:

2012-11-13 09:33:04.352 テスト [73816:5f03] *キャッチされない例外 'NSInvalidArgumentException' が原因でアプリを終了しています。理由: '[ setNilValueForKey]: キー hideLocations の値として nil を設定できませんでした。'

このような成熟したフレームワークがこの状況をより適切に処理しないことは、私には非常に奇妙に思えます。ご意見をいただければ幸いです。

4

2 に答える 2

1

null は JSON では有効なブール値ではなく、true と false のみであるため、objective-c でのオブジェクト マッピングが BOOL にするのは間違っていると思います。おそらく、ブール値を適切に表すように json を修正する必要があります (その後、クラッシュする null はありません)。または、hide_locations/hideLocations を NSString として扱い、[hideLocations boolValue]必要に応じてコードで使用します。

于 2012-11-13T21:00:44.450 に答える
0

残念ながら、この種の入力はRestKitでは十分に許容されていないようです。

この問題から保護するためにこれまでに受けた最も有用なアドバイスは、RestKitのBlakeWattersからです。

おそらくsetNilValueForKey:、ターゲットオブジェクトに実装して、適切に処理する必要があります。

つまり、JSONを事前にサニタイズするか、setNilValueForKey:

参照:https ://groups.google.com/forum/?fromgroups =#!topic / restkit / dlYVd0zCr3c

于 2012-11-14T22:15:56.753 に答える