1

Ok。私は検索して無駄に検索しました、そして私はこれに頭を打ち続けています。

UITextFieldに空白の値があるかどうかを判断しようとしています。ある場合は、空白の文字列ではなく、null値をサーバーに送信します。

次のコード

NSDictionary *locationDict = @{
    @"country":countryVal,
    @"state":stateVal,
    @"city":[cityField.text isEqualToString:@""] ? [NSNull null] : cityField.text
};
NSLog(@"%@", locationDict);

これをログに記録します

{
    city = "<null>";
    country = US;
    state = TN;
}

[NSNull null]でログに記録される理由がわかりません"<null>"。ユーザーが値を入力しない場合、アプリはその文字列を都市として送信し続けます。明らかに、私が意図していたものではありません。ここではネットワークコールを表示していませんが、AFNetworkingを使用してこれを行っています。ただし、AFNを呼び出す前に、辞書にnullではなくその文字列が含まれていることを確認できます。だから私は問題がAFNにあるのではないことを知っています。

どんな助けでも大歓迎です。

4

4 に答える 4

7

<null>の結果です[[NSNull null] description]。これは、で自分で確認できますNSLog(@"%@", [NSNull null]);<null>ユーザーが都市を入力しないとき以外の何かが必要な場合[NSNull null]は、行の代わりに必要な値を使用してください@"city":[cityField.text isEqualToString:@""] ? [NSNull null] : cityField.text

于 2013-01-24T00:19:32.063 に答える
2

(を使用して)Obj-Cオブジェクトをログに記録する%@と、NSLog関数は実際にそのオブジェクトを呼び出し-(NSString*)description、返される文字列を出力します。このメソッドは継承されNSObjectNSDictionary上書きされています。キーと値のペアのリストである文字列を作成し、=中括弧で区切ってラップします。descriptionそのため、その辞書の任意のキーと任意の値を呼び出します。descriptionまた、NSNullオブジェクトを呼び出すと、文字列が返されます<null>。のdesription方法はNSNull次のようになります。

- (NSString *)description
{
    return @"<null>";
}

ASCII文字と数字(この場合はと)NSDictionary以外の文字を含むすべての文字列は引用符で囲まれているため、周囲の引用符は。で追加されます。で置き換えると、これら2つも引用符で囲まれます。<>USUS.TN!TN

そもそもなぜ使うのかわからないNSNull。空の文字列を辞書に入れるのに問題はなく、サーバーは文字列が空かどうかを簡単にチェックできます。

NSDictionary *locationDict = @{
    @"country":@"US",
    @"state":@"TN",
    @"city":@""
};
NSLog(@"%@", locationDict);

出力

{
    city = "";
    country = US;
    state = TN;
}
于 2013-01-24T00:26:47.620 に答える
0

[[NSNullnull]の説明]に関する答えは正しいです。

'null'値をサーバーに送信する場合は、そのキーと値のペアを設定しないでください。ここで何か特別なことをしたい場合は、辞書を前処理する必要があります。

これの多くは、サーバーが処理する方法と送信する形式を制御できるかどうかによって異なります。

NSNullをnilに変換し、コレクション処理コードに戻すコードがあるのは非常に一般的です。

于 2013-01-24T00:31:15.097 に答える
0

別の方法でそれ自体を説明するnullが必要な場合は、NSNullをサブクラス化するか、NSValueをサブクラス化することを検討してください。NSValueをサブクラス化すると、NSPropertyListにデコード/エンコードできるものが得られるという追加の利点があります。

于 2013-01-24T01:27:41.007 に答える