0

現在、2つのJSON Webサービスを使用して、2つの別々のNSMutableArrayを非同期で埋めています。

ローカルストックとサプライヤーストック

最初のWebサービスはローカル在庫を取得し、もう1つはサプライヤー在庫を取得します。したがって、2つの配列がいっぱいになった-(void)compareArrays後、次の関数を実行しますdispatch_group_wait(group, DISPATCH_TIME_FOREVER);

カスタムオブジェクト

カスタムオブジェクトを使用して、Webサービスからのデータを保存します。各オブジェクトは1つの製品を表します。

Webサービスごとに異なるキー(同じ(タイプの)値)

両方のWebサービスが異なる名前のキーと値のペアを返すため(一方はオランダ語で、もう一方は英語でキーを返すため)、オブジェクトに対して2つの解析関数があります。基本的に[dictionary objectForKey:@"property"]、異なるWebサービスを解析する場合は異なりますが、設定されるプロパティは同じです。

ローカル在庫情報をサプライヤー在庫情報で更新する

また、supplier-webserviceは、ローカルストックWebサービスによって返品される製品も返品します。ローカル製品の特定のプロパティは、supplier-webserviceによって更新する必要があり、私はそれを機能させようとしています。

現在、これは多くの製品で機能しますが、一部の製品はどういうわけかifループを開始しません。JSONの結果を確認し、製品のローカルバージョンとサプライヤーバージョンの両方をNSLogに配置しました。ハッシュとexternalItemIdは同じでした。

このオブジェクトは、作成直後に、externalItemIdがexternalItemIdのsupplier-webserviceのキーである「artikelsysteemnummer」の値に設定されているにもかかわらず、どういうわけかifループを通過しません。それらのハッシュも同じです。

誰かがそれがどこでうまくいかないかもしれないという考えを持っていますか?この製品がMergeArrays関数によってスキップされているのがわかり、grossPriceは13100ではなく0のままです。

前もって感謝します!

アップデート

コードをもう一度確認したところ、WebServiceコードに、supplier-stockが0の場合は、製品を配列に追加しないという小さなデバッグコードが残っていました。削除するのを忘れましたが(一部のサプライヤーの在庫は0を返す可能性がありますが、ローカル在庫があるため、製品は更新されませんでした)。

みんなありがとう、そして幸せな休日を!

4

2 に答える 2

0

すみません!コードをチェックしたところ、Webサービスコードで削除するのを忘れたこのばかげたデバッグifループがあり、いくつかの製品を配列に追加できませんでした。助けてくれてありがとう!

(これを反映するためにメインの投稿を更新しました)

于 2012-12-18T14:38:04.863 に答える
-1

isEqualメソッドの実装方法を変更してお試しください。問題はここにあるのかもしれません。from if(![externalItemId isEqual:[otherProduct externalItemId]])return NO;

To if(![externalItemId isEqualToString:[otherProduct externalItemId]])return NO;

于 2012-12-18T10:50:50.523 に答える