4

私のアプリケーションでは、サーバー レスポンス ディクショナリをシリアル化し、それをファイル システムに書き込もうとしています。しかし、一部の応答で「Property list invalid for format」というエラーが表示されます。理由は、サーバー応答の CFNull オブジェクトです。現在、サーバーの応答は変化し続けるため、CFNull オブジェクトを削除する明確な方法はありません ()。以下は私のコードです:

NSString *anError = nil;
NSData *aData = [NSPropertyListSerialization dataFromPropertyList:iFile format:NSPropertyListXMLFormat_v1_0 errorDescription:&anError];

この問題に取り組む最善の方法は何ですか? サーバー応答からすべての CFNull オブジェクトを一度に削除するにはどうすればよいですか?

4

4 に答える 4

9

Facebook SDKからの応答の受信でこの問題が発生したため、次のメソッドを実装しました。

- (void)cleanDictionary:(NSMutableDictionary *)dictionary {
[dictionary enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
    if (obj == [NSNull null]) {
        [dictionary setObject:@"" forKey:key];
    } else if ([obj isKindOfClass:[NSDictionary class]]) {
        [self cleanDictionary:obj];
    }
}];

}

これにより、辞書の階層がたどり、すべてのCFNullが空の文字列に変わります。

于 2012-01-19T06:24:51.577 に答える
4

NSKeyedArchiver オプションに切り替えました。NSPropertyListSerialization より少し遅くなりますが、NSNull/CFNull オブジェクトを処理します。

于 2011-06-05T23:08:46.270 に答える
0

APIを介してシリアル化できない場合datafromPropertyList:...、それはプロパティ リストではありません。

サーバーの応答を修正して適切なプロパティ リストを構成するか、アプリ内のデータを操作して、プロパティ リストとして適切に解釈できるようにします。

于 2011-06-05T19:58:03.290 に答える