私は非常に奇妙な問題を抱えています。カテゴリ拡張の不一致iOS 10+
私は、タイトルと呼ばれるメソッドを持つNSDictionaryのカテゴリ拡張を持っています。このメソッドは次のように機能します:
- (NSString*)title {
return self[@"title"];
}
これが私にできることは、NSDictionary上でタイトルを返すためのコンビスメソッドを持つことです。ここで
は使用例です:物事が奇妙な取得する場所
NSDictionary *config = [mConfigManager currentConfig];
if ([config title]) {
return [config title];
}
return @"";
は今、これがあります。 iOS 10では、タイトルメソッドは時々でnilを返します。これがnilを返す場合、config[@"title"]
への手動呼び出しは値を返します。結果として、私は次のようにコードを調整しました:
NSDictionary *config = [mConfigManager currentConfig];
if ([config title]) {
return [config title];
}
else if(config[@"title"])
{
return config[@"title"];
}
return @"";
これは常に、タイトル(存在する場合)を返します。ただし、時々else if
ケースでのみ動作し、カテゴリバージョンでは機能しません。
そこで質問です:
それは手動コールとまったく同じことをやっているのに、なぜカテゴリーが値を返さないでしょうか?
最初のクリック
(lldb) po [config title]
Joe Bloggs
もう一度クリック
(lldb) po [config title]
nil
(lldb) po config[@"title"]
Joe Bloggs
注:次のログ出力を参照してください:このさえ見知らぬ人になり何
はそれがいつか働くんです:上記のログはどちらもdアプリの同じインスタンスを確認するには、テーブルビューのセルを選択します。これにより、割り当て解除または再割り当てが発生する可能性のあるすべてのケースが排除されます。
<object returned empty description>
変数ビューには、しかし、完全にオブジェクトとすべての変数を示しています。私はしかし、気づいた
一つは、コンソール出力がconfig
の内容、代わりに次のエラーが返されないことです。オブジェクトは変数リストにNSDictionaryM
と定義されています。
これに関するお手伝いは大変ありがとうございます。アップルからおそらく
事前
であなたのメソッドの名前を変更します(もちろん、
NSDictionary
にこのメソッドを追加したいと、強くあなたが本当に代わりにこの辞書を使用しての小さなデータクラスを作成する必要がありますが、それは完全に別の問題だ。ことを示唆しています)これを再現できるかどうかを確認してください。また、 '[mConfigManager currentConfig]'の内部で何が起こっていますか? –'nil'を返すときに行が壊れないので、呼び出されていないという印象を与えます。 '[mConfigManager currentConfig]'はNSDictionaryオブジェクトを返します。 –