NSManagedObject의 특정 하위 클래스를 찾을 수 없습니다.
저는 코어 데이터로 앱을 개발하는 일을 하고 있습니다.다음을 사용하여 인스턴스를 생성한 경우:
let entity = NSEntityDescription.entityForName("User", inManagedObjectContext: appDelegate.managedObjectContext)
let user = User(entity: entity, insertIntoManagedObjectContext: appDelegate.managedObjectContext)
로그에 경고가 기록되었습니다.
CoreData: warning: Unable to load class named 'User' for entity 'User'. Class not found, using default NSManagedObject instead.
어떻게 고칠 수 있을까요?
그리고 또 다른 질문은 NSManagedObject 하위 클래스에서 인스턴스 메서드를 어떻게 정의할 수 있습니까?
편집:
다음 스크린샷과 같이 엔티티 클래스를 지정했습니다.
Xcode 7(최종)에 대한 업데이트:클래스에 모듈 이름을 추가할 필요가 없습니다(Xcode 6 및 Xcode 7의 초기 베타 릴리스에서처럼).이에 따라 Apple 문서 Implementing Core Data Managed Object Subclasss가 업데이트되었습니다.
이제 데이터 모델 검사기에는 엔티티에 대한 두 개의 필드 "클래스"와 "모듈"이 있습니다.
엔티티에 대해 Swift 관리 개체 하위 클래스를 생성하면 "모듈" 필드가 "현재 제품 모듈"로 설정되며, 이 설정으로 인스턴스 생성은 기본 응용 프로그램과 장치 테스트 모두에서 작동합니다.관리 개체 하위 클래스는 다음으로 표시할 수 없습니다.@objc(classname)
(이는 https://stackoverflow.com/a/31288029/1187415) 에서 관찰되었습니다.
또는 "모듈" 필드를 비우고("없음"으로 표시됨) 관리 개체 하위 클래스를 다음으로 표시할 수 있습니다.@objc(classname)
(이는 https://stackoverflow.com/a/31287260/1187415) 에서 관찰되었습니다.
비고: 이 답변은 원래 Xcode 6용으로 작성되었습니다.이 문제와 관련하여 다양한 Xcode 7 베타 릴리스에 몇 가지 변경 사항이 있었습니다.많은 업데이트와 링크가 있는 승인된 답변이기 때문에 현재 Xcode 7 최종 버전에 대한 상황을 요약하려고 했습니다.
저는 직접 "조사"를 하고 이 질문과 유사한 질문에 대한 모든 답변을 읽었습니다. CoreData: warning: 명명된 클래스를 로드할 수 없습니다.그래서 제가 그들을 구체적으로 열거하지 않더라도, 그들 모두에게 귀속됩니다!
Xcode 6에 대한 이전 답변:
핵심 데이터 관리 개체 하위 클래스 구현에서 설명한 대로 모델 엔터티 검사기의 클래스 필드에 있는 엔터티 클래스 이름 앞에 모듈 이름(예: "MyFirstSwiftApp")을 붙여야 합니다.사용자".
그냥 참고로.저도 같은 문제가 있었습니다.그리고 내가 해야 할 일은@objc(ClassName)
우리 반 파일에.
예:
@objc(Person)
class Person { }
그리고 그것이 제 문제를 해결했습니다.
이 질문에 대한 수락된 답변은 제가 같은 문제를 해결하는 데 도움이 되었지만, 저는 다른 사람들에게 도움이 될 것이라는 경고를 받았습니다.프로젝트(모듈) 이름에 공백이 있는 경우 공백을 밑줄로 대체해야 합니다.예:
엔티티: MyEntity 클래스: My_App_Name.나의 수업
모듈을 제거해야 합니다.
일 수 있습니다.<appName>.<entityName>
▁as다▁and보니입▁it'▁as같처럼 보입니다.<appName>Tests.<entityName>
현재 사용하는 솔루션(Xcode 6.1)은 다음을 채우지 않는 것입니다.Class
필드를 사용하여 코드로 수행할 수 있습니다.
하고 "" " " " 를 합니다.managedObjectClassName
.
lazy var managedObjectModel: NSManagedObjectModel = {
// The managed object model for the application. This property is not optional...
let modelURL = NSBundle.mainBundle().URLForResource("Streak", withExtension: "momd")!
let managedObjectModel = NSManagedObjectModel(contentsOfURL: modelURL)!
// Check if we are running as test or not
let environment = NSProcessInfo.processInfo().environment as [String : AnyObject]
let isTest = (environment["XCInjectBundle"] as? String)?.pathExtension == "xctest"
// Create the module name
let moduleName = (isTest) ? "StreakTests" : "Streak"
// Create a new managed object model with updated entity class names
var newEntities = [] as [NSEntityDescription]
for (_, entity) in enumerate(managedObjectModel.entities) {
let newEntity = entity.copy() as NSEntityDescription
newEntity.managedObjectClassName = "\(moduleName).\(entity.name)"
newEntities.append(newEntity)
}
let newManagedObjectModel = NSManagedObjectModel()
newManagedObjectModel.entities = newEntities
return newManagedObjectModel
}()
프로젝트 이름에 "My-App"과 같은 하이픈을 사용하는 경우 "My_App"과 같은 하이픈 대신 밑줄을 사용합니다."내 관리 개체"입니다.일반적으로 xcdatamodeld 파일의 이름을 보고 해당 이름과 동일한 접두사를 사용합니다.즉, "My_App_1.xcdatamodeld"에는 접두사 "My_App_1"이 필요합니다.
이것은 같은 문제를 겪고 있는 사람들에게 도움이 될 수 있습니다.저는 스위프트 2와 Xcode 7 베타 2를 사용했습니다.
내 경우의 해결책은 논평하는 것이었습니다.@objc(EntityName)
EntityName.swift
.
위의 답변이 도움이 되었습니다.이 빠른 제정신 검사는 시간을 절약할 수 있습니다.프로젝트 > 빌드 단계 > 소스 컴파일로 이동하여 "-" 버튼으로 xcdata model 및 모델 파일을 제거한 후 "+" 버튼으로 바로 추가합니다.재구축 - 처리할 수 있습니다.
제 앱이 정상적으로 실행되는 것처럼 보였지만, 저는 같은 경고를 받았습니다.문제는 마지막 화면에서 Editor > Create NSManagedObject Subclass를 실행할 때 Targets가 표시되거나 선택되지 않은 기본 Group 위치를 사용하여 MyApp.xcodeproj가 있는 상단 MyApp 디렉토리에 서브클래스를 저장했다는 것입니다.
대신 그룹을 MyApp 하위 폴더로 변경하고 MyApp 대상을 확인했을 때 경고가 사라졌습니다.
그런데 접두사로 추가하는 것을 주의하세요: 제 앱은 "ABC-def"라고 하며 Xcode는 "-"를 "_"로 변환했습니다.
파인더를 안전하게 조사하려면 프로젝트 파일을 찾아서 데이터 모델에 대해 무엇이 쓰여 있는지 확인하고(예: "ABC_def.xcdatamodeld") 거기에 쓰여 있는 것을 정확히 사용하십시오!!!
위의 답변은 목표-C와 관련된 다양한 문제를 해결하는 데 도움이 되었습니다(아마도 누군가에게 도움이 될 것입니다).
엔티티 이름을 리팩터링한 경우 "유틸리티 패널"에서도 "클래스"를 변경하는 것을 잊지 마십시오.
위의 답변들은 나에게 도움이 되었지만 이것은 누군가에게 도움이 될 수 있습니다.저처럼 작업을 수행했지만 여전히 문제가 있는 경우에는 단순히 '프로젝트를 정리'하는 것을 기억하십시오.XCode8의 경우 제품 > Clean.그리고 다시 뛰어요.
Xcode 7에서 엔티티와 클래스 이름은 동일할 수 있지만 Codegen은 클래스 정의여야 합니다.이 경우 경고 등이 발생하지 않습니다.
언급URL : https://stackoverflow.com/questions/25076276/unable-to-find-specific-subclass-of-nsmanagedobject
'programing' 카테고리의 다른 글
파이썬용 .py를 .exe로 변환하려면 어떻게 해야 합니까? (0) | 2023.05.26 |
---|---|
파이프 'async'를 찾을 수 없습니다. (0) | 2023.05.26 |
CSV 파일에 새 열을 추가하는 방법은 무엇입니까? (0) | 2023.05.26 |
매개 변수화된 쿼리는 제공되지 않은 매개 변수를 예상합니다. (0) | 2023.05.26 |
텐서플로 CPU 전용 설치에 동적 라이브러리 'cudart64_101.dll'을(를) 로드할 수 없습니다. (0) | 2023.05.26 |