2012-05-06 1 views
0

데이터를 순환하는 핵심 데이터 가져 오기 기능이 있고 가져 오기 프로세스 중에 중복 레코드가 무시됩니다.기가 코어 저장되지 않은 데이터를 가져올 때의 데이터 동작

그러나 NSFetchRequest가 저장되지 않은 최근 저장된 레코드와 일치하지 않는 것을 발견했습니다. 그리고 나는 서로 다른 예기치 않은 결과를 제공하는 겉으로보기에 똑같은 쿼리를보고 있습니다. 동일 둘 다 경기 후 -

fetchTest.predicate = [NSPredicate predicateWithFormat:@"%K = %@", @"intEmployee_id", @"3882"]; 

그러나 :

fetchTest.predicate = [NSPredicate predicateWithFormat:@"%K = 3882", @"intEmployee_id"]; 

그러나이 겉으로는 동일 하나가되지 않습니다

예를 들어, 내 시험에서,이 쿼리가 일치하고 결과를 반환 발견 컨텍스트는 지속적 저장소에 저장됩니다.

Apple 설명서에 따르면 페치는 기본적으로 보류중인 변경 사항에 대해 작동해야하며 실제로 [fetchTest includesPendingChanges] = YES를 준수합니다.

지구상의 어떤 아이디어가 여기에 있습니까? 두 가지 가져 오기가 어떻게 다른 결과를 반환 할 수 있습니까?

답변

1

직원 ID가 문자열이 아니라 숫자 일 수 있습니까? 그런 다음 술어는해야한다 : 이것은 이상한 행동 유형을 혼합에서 오는 것을 의미하는 것이다

[NSPredicate predicateWithFormat:@"%K = %@", @"intEmployee_id", 
              [NSNumber numberWithInt:3882]]; 

. 그것은 비록 SQLite 문서에서 실제로 SQLite가 실제로 데이터를 물리적으로 저장할 때 유형별로 구별하지 않기 때문에 불규칙한 경우에도 여전히 어떻게 든 작동합니다.

SQLite 웹 사이트의 Manifest Typing 아래 Distinctive Features of SQLite을 참조하십시오.

+0

당신이 뭔가 있을지도 모른다고 생각합니다 ... 저는 타입에 따라 구별하지 않고 SQLite를 사용했습니다. 그리고 모든 핵심 데이터 실험은 데이터 필드가 아래에 있더라도 문자열에서 술어를 어셈블하는 데 아무런 문제가 없었습니다. 숫자. – radven

+0

다음은 이것이되어야합니다. 핵심 데이터는 의도적으로 데이터베이스 계층을 숨 깁니다. 당신이 기대하는 행동은 예측할 수 없습니다. ID를 쿼리하는 올바른 방법은 위의 코드입니다. 시도해보고 문제가 해결되면 알려주십시오. – Mundi

1

이들은 실제로 동일한 값으로 평가되지 않습니다.

[NSPredicate predicateWithFormat:@"%K = 3882", @"intEmployee_id"] 

는 ID에 대한 문자열 대신 번호를 사용하십시오 intEmployee_id = "3882"

로 평가 intEmployee_id = 3882

[NSPredicate predicateWithFormat:@"%K = %@", @"intEmployee_id", @"3882"] 

동안 평가.

+0

실제로 - 두 개의 다른 쿼리 문자열로 평가되지만 데이터베이스가 영구 저장소에 저장되었지만 이전에 저장되지 않은 경우 동일하게 수행됩니다. – radven

+1

나는 이것을 Apple에 버그로 저장합니다. 저장하기 전과 후에 동일한 동작을해야하기 때문입니다. ** 서로 다른 ** 경우에도 동일하게 평가해야합니다. – lnafziger

+1

완료 - 레이더 ID : 11394751 – radven