최대 길이 값이 40 인 핵심 데이터 엔티티에 문자열 속성이 있습니다. 코드에서이 값을 사용하고 값을 다시 입력하지 않아도됩니다. "40" 이것이 가능한가?코드에서 핵심 데이터 속성 유효성 검사 정보에 액세스하려면 어떻게합니까?
답변
@ K.Steff는 위의 설명에서 코드에서 유효성 검사를하고 핵심 데이터 모델에서 최대 길이를 설정하지 않는 것이 좋습니다. 이 주석에 추가하려면이 엔티티 유형에 대해 사용자 정의 NSManagedObject 서브 클래스를 사용하고 서브 클래스 내에서 validateValue:forKey:error:
을 겹쳐 쓰거나이 특성에 대한 키 특정 유효성 검증 메소드를 구현하는 것이 좋습니다.
이 접근법의 가치는 유효성 검사 시간에 문자열을 잘라서 유효성 검사를 "강요하는"것과 같은 일을 할 수 있다는 것입니다. NSManagedObject 문서에서 : 너무 긴 경우 모두 문자열이 필요한 경우, 너무 긴 아니라는 것을 확인에
This method is responsible for two things: coercing the value into an appropriate type for the object, and validating it according to the object’s rules.
The default implementation provided by NSManagedObject consults the object’s entity description to coerce the value and to check for basic errors, such as a null value when that isn’t allowed and the length of strings when a field width is specified for the attribute. It then searches for a method of the form validate< Key >:error: and invokes it if it exists.
You can implement methods of the form validate< Key >:error: to perform validation that is not possible using the constraints available in the property description. If it finds an unacceptable value, your validation method should return NO and in error an NSError object that describes the problem. For more details, see “Model Object Validation”. For inter-property validation (to check for combinations of values that are invalid), see validateForUpdate: and related methods.
그래서이 방법을 구현할 수 있습니다, 그것을 잘라.
NSManagedObject
에서 entity
을 통해 NSEntityDescription
에 액세스 할 수 있습니다. 여기서 배열 properties
과 사전 propertiesByName
을 가져올 수 있으며 그 중 하나는 NSPropertyDescription
입니다. 각 속성 설명에는 이라는 속성이 있으며 NSPredicate
의 배열을 반환합니다. 그중 하나는 문자열 길이가 최대 40 자 여야한다는 조건이됩니다.
슬픈 표현자를 리버스 엔지니어링하는 데는 많은 번거 로움이 있습니다. 블록을 제공하여 슬픈 정의를 만들면 . 다행히도 NSComparisonPredicate
이 있거나 NSCompoundPredicate
또는 NSExpression
에서 아래로 걷는 트리로 갈 수는 있습니다.
비교 술어에서 왼쪽 및 오른쪽 식에서 하나가 문자열 길이이고 다른 하나는 상수 값이라는 것을 알 수 있습니다.
그래서, 요약 :
- 코어 데이터는 술어의 가장 일반적인 수단을 통해 검증 기준을 노출;
- 일반적으로 항상 그런 것은 아니지만, 술어에서 표현식 (자연 언어 의미로는
NSExpression
의미가 아닌)을 다시 작성할 수 있습니다. 그리고 - 길이 비교가 필요한 곳을 찾고 계시다면 길이가 포함 된 비교 술어에 대한 트리를보다 쉽게 이해할 수 있습니다.
특정 및 일반의 불일치로 인해 분명히 예쁜 것은 아니지만 가능합니다.
- 1. 코드에서 핵심 데이터 엔티티의 속성에 액세스하려면 어떻게합니까?
- 2. PHP를 사용하여 PDF 파일에서 메타 데이터 정보에 액세스하려면 어떻게합니까?
- 3. UIManagedDocument - 핵심 데이터 엔티티 유효성 검사
- 4. 속성 별 유효성 검사 속성
- 5. 핵심 데이터 속성 고유성
- 6. Xcode 핵심 데이터 속성
- 7. 코드에서 VB6 모듈의 이름에 액세스하려면 어떻게합니까?
- 8. 코드에서 C# 성능 카운터에 액세스하려면 어떻게합니까?
- 9. MSBuild 유효성 검사 속성
- 10. 유효성 검사 속성
- 11. jQuery 유효성 검사 - 핵심 유효성 검사 메소드 덮어 쓰기
- 12. Spring에서 데이터 소스에 액세스하려면 어떻게합니까?
- 13. edmx를 통해 속성 유효성 검사
- 14. 데이터 유효성 검사
- 15. ActionFilter에서 ModelState에 액세스하려면 어떻게합니까?
- 16. Google 캘린더 정보에 액세스하려면 어떻게해야합니까?
- 17. HTML5 유효성 검사 메타 데이터
- 18. 핵심 데이터 속성 유형 목록?
- 19. JSP/Servlet 속성 유효성 검사
- 20. Silverlight 유효성 검사 종속성 속성
- 21. MVC3 클래스 유효성 검사 속성
- 22. 객체의 유효성 검사 속성 읽기
- 23. 기본 유효성 검사 속성 무시
- 24. 속성 당 JSF 유효성 검사
- 25. 메서드 속성 입력 유효성 검사
- 26. 조건부로 유효성 검사 속성 제거
- 27. WPF에서 교차 속성 유효성 검사
- 28. 핵심 데이터 스키마에 주석을 달려면 어떻게합니까?
- 29. MVC의 데이터 유효성 검사
- 30. 데이터 유효성 검사
확실한 질문이지만 그럼에도 불구하고 질문해야합니다. 핵심에이 번호를 아는 것이 가장 좋은 해결책이라고 확신합니까? 어쩌면'validateValue : forKey : error :'를 호출하는 것이 효과가 있을까요? –
이 특별한 경우에 값이 잘못된 것인지 확인할 수 있도록 값을 알고 싶지 않습니다. 실제로이 길이의 문자열을 잘라서 유효하게 만들 수 있습니다. –
나는 이것에 대해 100 % 확실하지 않지만, CoreData의 일부분은 독점적 인 코드라고 생각합니다. 답변이 없으므로 동일한 체크를 코드에 쓰고 KVC의 유효성 검사 방법으로 등록하는 것이 좋습니다. –