2012-12-18 2 views
0

현재 두 개의 JSM 웹 서비스를 사용하여 두 개의 개별 NSMutableArrays를 비동기 적으로 채 웁니다.IOS : 웹 서비스에서 NSMutableArray를 NSMutableArray로 병합 및 업데이트

현지 증권 & 공급 업체의 재고

첫 번째 웹 서비스 지역 주식을 검색, 다른 하나는 공급 업체의 주식을 검색합니다. 두 배열이 채워지 후 그래서, 나는

내가 웹 서비스에서 데이터를 저장하는 사용자 정의 개체를 사용 dispatch_group_wait(group, DISPATCH_TIME_FOREVER);

사용자 정의 개체 후 -(void)compareArrays 기능을 실행합니다. 각 객체는 하나의 제품을 나타냅니다. 웹 서비스 당

다른 키 (의 동일 (유형) 값) 모두 웹 서비스가 다르게 키 - 값 쌍을 이름을 반환하는데

(하나는 네덜란드에서의 키를 반환하기 때문에, 영어로 다른) 내가있어 객체에 대한 두 가지 구문 분석 함수. 기본적으로 [dictionary objectForKey:@"property"]은 다른 웹 서비스를 구문 분석 할 때 다르지만 설정되는 속성은 동일합니다. 공급 업체 주식 정보

공급자 - 웹 서비스와

업데이트 현지 주식 정보는 현지 재고의 웹 서비스에 의해 반환되는 제품을 반환합니다. 지역 제품의 특정 속성은 supplier-webservice에서 업데이트해야하며 작동하도록 노력하고 있습니다.

이제는 많은 제품에서 작동하지만 일부 제품은 어떻게 든 if-loop를 설정하지 않습니다. JSON 결과뿐만 아니라 제품의 로컬 버전과 공급자 버전을 모두 NSLog에 넣었습니다 : 해시와 externalItemId는 동일합니다.

이 객체는 if 루프를 통과하지 못합니다. 생성 직후에도 externalItemId가 externalItemId의 supplier-webservice 키인 "artikelsysteemnummer"값으로 설정됩니다. 그들의 해시도 동일합니다.

어디서 잘못 될지 생각하는 사람이 있습니까? 왜냐하면이 제품은 MergeArrays 함수에 의해 건너 뛴다는 것과 GrossPrice는 13100 대신 0으로 남아 있기 때문입니다.

미리 감사드립니다!

업데이트 난 다시 내 코드를 확인하고, WebService에 코드의 공급 업체 재고가 0 인 경우 말했다 거기에 붙어이 작은 코드를 디버깅이 있었다

이의에 제품을 추가하지 마십시오 정렬. 비록 그것을 제거하는 것을 잊어 버렸지 만 (일부 공급 업체 주식은 0을 반환 할 수 있기 때문에 현지 재고로 보유 할 것이므로 제품이 업데이트되지 않았습니다).

모두에게 감사 드리며 즐거운 연말을 보내십시오!

+0

요약하면 무엇을하고 싶습니까? 두 개의 배열을 고유 한 값으로 병합 하시겠습니까? –

+0

Webservice를 1 -> 배열 1 ='OldObject''OldObject''OldObject''OldObject' Webservice를 2 -> 배열 2 ='(OldObject + additionalInfo가)''NewObject'가'새로운 Object'이 이 가지고있는'배열 1 : OldObject'는'(Array2 : OldObject + additionalInfo)'의 새로운 정보로 자신을 업데이트하고 업데이트 된'OldObjects '와 함께'NewObject'를 새로운 Array에 추가합니다. 'Array1 : OldObject'와'Array2 : (OldObject + additionalInfo)'는 같은 해쉬와 externalItemId를 가지고 있습니다. –

+0

[Array2 replaceObjectAtIndex : yourIndex withObject : old + new]; –

답변

0

죄송합니다. 방금 내 코드를 점검했는데,이 바보 같은 디버그 if-loop가 여러 제품이 배열에 추가되지 못하도록 웹 서비스 코드에서 제거하는 것을 잊어 버렸습니다. 그래도 도와 ​​줘서 고마워!

(이를 반영하기 위해 메인 포스트를 업데이트했습니다)

-1

isEqual 메서드 구현 방법을 변경하고 시도하십시오. 문제가있을 수 있습니다. if (![externalItemId isEqual : [otherProduct externalItemId]])를 반환합니다. (! [externalItemId isEqualToString [otherProduct externalItemId])

아니오를 반환하지;

+0

두 줄이 완전히 동일하지 않습니까? –

+0

나는 위의 코드를 시도하고 많이하지 않았다. Hesham이 지적했듯이, 똑같은 일을해야한다. (비록 내 코드가 더 클래스에 독립적이라면, externalItemId가 NSString이 아닌 다른 것일 수도있다.) –