'작업'이라는 핵심 데이터 엔티티가 있습니다.
'Task'는 'Tag'라는 다른 엔티티와 관계가 있습니다. @NSManaged public var tags: NSSet?
이 데이터는 다음과 같이 저장됩니다.
public var tagsArray: [Tag] {
let set = tags as? Set<Tag> ?? []
return set.sorted {
$0.wrappedTagTitle < $1.wrappedTagTitle
}
}
특정 태그 (예 : "School"제목)가 포함 된 작업 목록을 기준으로 필터링하려고합니다.
var fetchRequest: FetchRequest<Task>
init(tagFilterName: String) {
let tag = Tag()
tag.title = tagFilterName
fetchRequest = FetchRequest<Task>(entity: Task.entity(), sortDescriptors: [], predicate: NSPredicate(format: "tagsArray CONTAINS %@", tag))
}
이것은 상위 뷰에서 초기화됩니다.
FilteredScrollView(tagFilterName: "School")
(초기화의 우연한 코드를 실례합니다. 나는 단지 내가하려는 일을 이해하려고 노력하고 있습니다.)
현재로서는 런타임에 충돌이 발생합니다. 어떤 도움이라도 대단히 감사하겠습니다.
당면한 문제는 Tag()
지정된 이니셜 라이저를 호출하지 않는 새 인스턴스를 만들기 위해 호출한다는 것 입니다. 새를 만들려면 Tag
당신은 사용해야합니다 Tag(context: NSManagedObjectContext)
. 제대로 초기화되지 않은 개체를 사용하려고했기 때문에 충돌이 발생합니다.
그것은 문제의 일부일뿐입니다. 이를 고치면 충돌을 고칠 수 있지만 결과가 0이됩니다. 다른 문제는 Tag
가져 오기를 위해 새 파일 을 만들지 않아야한다는 것 입니다. Core Data 술어는 정확히 일치하는 항목을 찾습니다.와 같은 것은 없으며 동일한 제목을 가진 Equatable
다른 항목 Tag
을 찾지 않습니다 . 정확한 태그를 찾을 것입니다. 하지만 방금 해당 태그를 생성했고 어떤 작업에도 연결되어 있지 않기 때문에 결과가 없습니다. CONTAINS
더 이후 운영자는 아무것도 일치하지 않습니다 Task
포함 Tag
방금 만든.
관계를 통해 속성 값을 일치 시키려면 (이 경우 관계를 Tag.title
통해 일치 ) tags
조건 자는 다음과 같습니다.
NSPredicate(format: "any tags.title = %@", tagFilterName)
가져올 때 관계의 구성원 이 같은 값을 갖는 위치를 Task
묻습니다 .Task
tags
tagFilterName
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다