編集: 大幅な編集、混乱を招いて申し訳ありません!
私は現在、2 つの異なる方法を使用して JSON WebService から 2 つの配列を取得するアプリに取り組んでいます。
最初の配列では、ローカルの在庫を取得します。2 番目の配列では、サプライヤーの在庫を取得します。
私は画像がよりよく説明すると思いますが:
そのため、Web サービスは多数のアイテムを取得します。配列 1 にはローカル在庫のアイテムが含まれ、配列 2 にはサプライヤーからのアイテムが含まれ、説明などの情報が追加されます。両方の配列をマージして、ローカルの在庫配列 1 内の既存のアイテムをサプライヤー在庫配列 2 内のアイテムの説明で更新したいと思います。
これが私が達成しようとしていることの例です。すべての製品は一意の識別子プロパティ (例には記載されていません) によって識別され、それを補うために isEqual と hash をオーバーライドしました。商品の ID が類似している場合、同等と見なされます。
**Product**
@property id *internalID;
@property id *externalID ;
@property id *localStock;
@property id *supplierStock;
@property id *image;
@property id *productInfo;
Webservice 1
3 つの製品が返されるようになりました。
製品 1
*internalID = ABCDEF
*externalID = (null)
*localStock = 15
*supplierStock = (null)
*image = (null)
*productInfo = (null);
製品 2
*internalID = GHIJK
*externalID = (null)
*localStock = 13
*supplierStock = (null)
*image = niceImage.png
*productInfo = @"This Product is Awesome!";
製品 3
*internalID = LMNOP
*externalID = (null)
*localStock = 7
*supplierStock = (null)
*image = (null)
*productInfo = (null);
Webservice 2
4 つの製品を返します。そのうちの 2 つは配列 1 にも含まれています。
製品 1
*internalID = (null)
*externalID = 123456
*localStock = (null)
*supplierStock = 12
*image = external_product1image.jpg
*productInfo = @"This product is also Awesome and in both local stock and supplier stock!";
製品 4
*internalID = (null)
*externalID = 23456
*localStock = (null)
*supplierStock = 11
*image = niceImage.png
*productInfo = @"This Product is Awesome and only available from our supplier!";
製品 3
*internalID = (null)
*externalID = 78901
*localStock = (null)
*supplierStock = 7
*image = external)supplierimage.jpg
*productInfo = @"This product is also Awesome and in both local stock and supplier stock!";
次に、次のmergedArray
ようになります。
製品 1
*internalID = ABCDEF
*externalID = 123456
*localStock = 15
*supplierStock = 12
*image = external_product1image.jpg
*productInfo = @"This product is also Awesome and in both local stock and supplier stock!";
//したがって、配列 1 の製品 1 は、そのプロパティを配列 2 の製品 1 とマージしました
製品 2
*internalID = GHIJK
*externalID = (null)
*localStock = 13
*supplierStock = (null)
*image = niceImage.png
*productInfo = @"This Product is Awesome!";
製品 3
*internalID = LMNOP
*externalID = 78901
*localStock = 7
*supplierStock = 7
*image = external)supplierimage.jpg
*productInfo = @"This product is also Awesome and in both local stock and supplier stock!";
製品 4
*internalID = (null)
*externalID = 23456
*localStock = 13
*supplierStock = 11
*image = niceImage.png
*productInfo = @"This Product is Awesome and only available from our supplier!";
これは私が使用したコードですが、どういうわけか時々グリッチアウトするようです:
- (void) compareArrays:(id)sender metBreedte:(NSString *)breedte metHoogte:(NSString *)hoogte metDiameter:(NSString *)diameter
{
NSMutableSet *getBandenSet = [NSMutableSet setWithArray:getBandenArray]; NSUInteger i = 0;
while (i < [getBandenInfo1Array count]) {
id getBandenInfo1Object = [getBandenInfo1Array objectAtIndex:i];
if ([getBandenSet containsObject:getBandenInfo1Object])
{
BWBand *getBandenBand = [getBandenSet member:getBandenInfo1Object];
BWBand *getBandenInfo1Band = getBandenInfo1Object;
// Do stuff to the Banden (sync)
getBandenBand.alternatievePrijs = getBandenInfo1Band.alternatievePrijs;
getBandenBand.itemName = getBandenInfo1Band.itemName;
getBandenBand.supplierStock = getBandenInfo1Band.supplierStock;
getBandenBand.grossPrice = getBandenInfo1Band.grossPrice;
getBandenBand.eancode = getBandenInfo1Band.eancode;
getBandenBand.EMarked = getBandenInfo1Band.EMarked;
getBandenBand.garagePrijs = getBandenInfo1Band.garagePrijs;
getBandenBand.loadIndex = getBandenInfo1Band.loadIndex;
getBandenBand.brand = getBandenInfo1Band.brand;
getBandenBand.custPrice = getBandenInfo1Band.custPrice;
getBandenBand.netPrice = getBandenInfo1Band.netPrice;
getBandenBand.tyreLabel = getBandenInfo1Band.tyreLabel;
getBandenBand.TyreLabelFuel = getBandenInfo1Band.TyreLabelFuel;
getBandenBand.TyreLabelNoise = getBandenInfo1Band.TyreLabelNoise;
getBandenBand.TyreLabelNoiseLevel = getBandenInfo1Band.TyreLabelNoiseLevel;
getBandenBand.TyreLabelWet = getBandenInfo1Band.TyreLabelWet;
getBandenBand.foto = getBandenInfo1Band.foto;
NSMutableString *string1 = [NSMutableString stringWithString: getBandenBand.colorStock];
NSString *newString = [string1 substringToIndex:[string1 length]-2];
NSString *colorStock = [NSString stringWithFormat:@"%@-%@",newString,getBandenInfo1Band.supplierStock];
getBandenBand.colorStock = colorStock;
[getBandenSet removeObject:getBandenInfo1Object];
[getBandenInfo1Array removeObjectIdenticalTo:getBandenInfo1Object];
} else
{i++;}
mergedBandenArray = [NSMutableArray arrayWithArray:[getBandenArray arrayByAddingObjectsFromArray:getBandenInfo1Array]];
[mergedBandenArray sortUsingDescriptors:
[NSArray arrayWithObjects:
[NSSortDescriptor sortDescriptorWithKey:@"colorStock" ascending:NO], [NSSortDescriptor sortDescriptorWithKey:@"brand" ascending:YES], nil]];}
これはすべて NSPredicates を使用して実行できますか? もしそうなら、どのように?
前もって感謝します!