Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c IOS:从webservice将NSMutableArray与NSMutableArray合并并更新_Objective C_Ios_Web Services_Nsmutablearray_Merging Data - Fatal编程技术网

Objective c IOS:从webservice将NSMutableArray与NSMutableArray合并并更新

Objective c IOS:从webservice将NSMutableArray与NSMutableArray合并并更新,objective-c,ios,web-services,nsmutablearray,merging-data,Objective C,Ios,Web Services,Nsmutablearray,Merging Data,我目前正在使用两个JSON web服务异步填充两个单独的NSMutableArray 本地库存和供应商库存 第一个web服务检索本地库存,另一个检索供应商库存。 因此,在两个数组被填满后,我在dispatch\u group\u wait(group,dispatch\u TIME\u FOREVER)之后运行-(void)comparararrays函数 自定义对象 我使用一个自定义对象来存储来自webservices的数据。每个对象代表一种产品 每个Web服务的不同键(相同(类型)值) 由于

我目前正在使用两个JSON web服务异步填充两个单独的NSMutableArray

本地库存和供应商库存

第一个web服务检索本地库存,另一个检索供应商库存。 因此,在两个数组被填满后,我在
dispatch\u group\u wait(group,dispatch\u TIME\u FOREVER)之后运行
-(void)comparararrays
函数

自定义对象

我使用一个自定义对象来存储来自webservices的数据。每个对象代表一种产品

每个Web服务的不同键(相同(类型)值)

由于两个Web服务返回不同名称的键值对(因为一个以荷兰语返回其键,另一个以英语返回其键),因此我为该对象提供了两个解析函数。基本上,
[dictionary objectForKey:@“property”]
在解析不同的Web服务时是不同的,但其设置的属性是相同的

使用供应商库存信息更新本地库存信息

供应商Web服务还返回由本地库存Web服务返回的产品。本地产品的某些属性必须由供应商Web服务进行更新,我正在努力使其正常工作

现在,这适用于许多产品,但有些产品不知何故没有触发if循环。我检查了JSON结果,并将产品的本地版本和供应商版本都放在了NSLog中:它们的哈希和externalItemId是相同的

这个对象不知何故没有通过if循环,即使在创建之后,externalItemId被设置为“artikelsysteemnummer”的值,这是供应商Web服务的externalItemId密钥。它们的散列也是相同的

有人知道哪里会出错吗?因为我看到MergeArrays函数跳过了这个产品,grossPrice保持为0而不是13100

提前谢谢

更新

我再次检查了我的代码,在WebService代码中有一个小调试代码,上面说如果供应商库存为0,不要将产品添加到数组中。虽然我忘了删除它(因为一些供应商的库存可能返回0,但我们会在本地库存中有它,因此产品没有更新)


谢谢大家,祝大家节日快乐

请更改isEqual方法的实现方法并重试。问题可能就在这里。 从…起 如果(![externalItemId isEqual:[otherProduct externalItemId]])返回否


如果(![externalItemId IsequalString:[otherProduct externalItemId]])返回否

对不起,伙计们!我刚刚检查了我的代码,有一个愚蠢的debug if循环,我忘记在webservice代码中删除它,它阻止了几个产品被添加到数组中。谢谢你的帮助


(我更新了主要帖子以反映这一点)

简单地说,你想做什么?合并两个具有唯一值的数组?Webservice 1->Array 1=
OldObject
OldObject
OldObject
OldObject
Webservice 2->Array 2=
(OldObject+additionalInfo)
NewObject
NewObject
Array1:OldObject
使用
(Array2:OldObject+additionalInfo)
中的新信息更新自身,并将
NewObject
以及更新后的
OldObjects
添加到新数组中
Array1:OldObject
Array2:(OldObject+additionalInfo)
具有相同的哈希和externalItemId。[Array2 replaceObjectAtIndex:yourIndex withObject:old+new];如果OldObject还包含旧对象+新对象不包含的数据,那么这将有效。基本上,旧+新是一个升级,需要应用到旧的,然后新对象必须添加到列表与升级的旧对象(如果有任何意义)这两行不是完全相同吗?我尝试了上面的代码,它没有做太多。正如Hesham所指出的,它应该做同样的事情(尽管我认为我的代码可能更不区分类,如果externalItemId不是NSString的话)。