2017-09-07 3 views
0

나는 값이 있는지 확인하기 위해 NSDecimalNumber와 다음 NSPredicate를 사용하려고 해요와 아이폰 OS 자 NSPredicate 0보다 큰스위프트 - 옵션 NSDecimalNumber

let addPredicate:NSPredicate = NSPredicate(format:"balance > 0", argumentArray: []) 

"균형"코어에서 선택 사양 NSDecimalNumber 속성입니다 데이터 개체. 그 결과는 < 0, 또는 balance == 0을 시도해도 공백 (오류 없음)이 발생합니다. 널 (null) 밸런스 레코드가 없음을 확인할 수 있습니다. 나는 이것이 속성의 "선택적인"속성 때문이라고 생각합니다. 선택적 날짜와 NSNumber 값을 비교하는 술어는 문제없이 작동합니다.

다른 구문을 사용하여 비교해야합니까 선택 사항 ?

답변

0

선택 사항이라는 사실은 차이를 만들지 않아야합니다. 사용할 수있는 구문이 다르지만 귀하도 사용할 수 있습니다. 당신은 개체 구문 시도 할 수 있습니다 :

NSPredicate(format:"balance > %@", argumentArray: [NSDecimalNumber.zero]) 

을하지만 그것은 당신의 술어와 똑같은 수행하고 동일한 결과를 반환해야합니다.

0보다 크고 0보다 작고 0과 같은 옵션을 모두 시도한 경우 (0과 같으면 엔티티가 없음을 반환해야 함) 가장 간단한 설명에 개체가 전혀 없다는 것입니다.

내가 술어가 문제가 있음을 생각하지 않는다, 나는

는 희망이 도움이 ... 만드는 몇 가지 문제/저장 새 엔티티 또는 어쩌면 그들이 삭제가 있는지 확인하는 것이 좋습니다 것입니다.

+0

답장을 보내 주셔서 감사합니다. Oleg. 확실히 거기에 물건이 있습니다. 전체 조건자는 다음과 같습니다. let addPredicate : NSPredicate = NSPredicate (형식 : "balance> 0 AND dueDate <% @", argumentArray : [todayDate]). 그리고 내가 dueDate 만 포함하도록 이것을 줄이면 제대로 작동하고 올바른 레코드를 반환합니다. 내가 균형과 dueDate, 또는 균형만으로 시도한다면, 나는 0 개의 결과를 얻는다. 안타깝게도 행운을 빌어 구문을 시도했습니다. –

0

가져 오기 술어에서 일시적인 특성 ("균형")을 사용하려고 시도했음을 알게되었습니다. 그래서 대신 가져온 결과에 대해 필터를 사용했으며 올바른 결과를 제공합니다.

filteredItems = (fetchedResultsController.fetchedObjects?.filter { item in 
      let searchResult:Bool = (item.balance!.compare(NSDecimalNumber.zero) == .orderedDescending) 

      return searchResult 

      })! 
관련 문제