NSManagedObject의 서브 클래스 서브 클래 싱

피터 쇼

NSManagedObject-Subclasses가 생성 될 때 깔끔하고 깔끔하게 유지하려고 노력하지만 특정 기능을 추가하고 싶습니다.

내 첫 번째 아이디어는 하위 클래스를 하위 클래스로 만드는 것이 었습니다.

예를 들어 내 계정이 생성되고 다음과 같이 표시됩니다.

import Foundation
import CoreData

class Account: NSManagedObject {
    @NSManaged var displayName: String
    @NSManaged var host: String
    @NSManaged var port: NSNumber
    @NSManaged var schema: String
    @NSManaged var username: String
}

내가 그것을 서브 클래 싱하고 새로운 것을 초기화하기 위해 func 클래스를 추가하는 것보다.

import Foundation
import CoreData

class AccountModel: Account {

    static var entityName = "Account"

    class func createAccount(context: NSManagedObjectContext) -> AccountModel {
        let entity = NSEntityDescription.entityForName(entityName, inManagedObjectContext: context)
        let account = AccountModel(entity: entity!, insertIntoManagedObjectContext: context)
        return account
    }
}

내 Unittest는이 부분에서 잘 작동합니다.

func testCreateAccount(){
    let account = AccountModel.createAccount(managedObjectContext!)
    dump(account)

    let accounts = AccountModel.getList(managedObjectContext!)
    XCTAssertEqual(accounts.count, 1, "There is no account created, yet")
}

그러나 AccountModel에 새 함수 또는 계산 된 속성을 추가하면 BAD_ACCESS 오류가 발생합니다.

class AccountModel: Account {
    [...]
    func foo(){
        println("bar")
    }
}

그리고 내 테스트에서 :

let account = AccountModel.createAccount(managedObjectContext!)
account.setValue("localhost", forKey: "host")
account.setValue(8080, forKey: "port")
account.setValue("https", forKey: "schema")    
account.foo()

계정 이음새가 AccountModel이 아닌 Account의 인스턴스가됩니다.

생성 된 클래스를 모델 클래스에서 분리하는 문제를 해결하도록 도와 주실 수 있습니까?

감사합니다. 추신.

kishikawa katsumi

아마도 Swift 컴파일러 버그 일 것입니다. 하위 클래스의 인스턴스를 제대로 생성하지 않는 것 같습니다. 동적 디스패치 분석이 불완전하다고 생각하면 컴파일러가 하위 클래스를 올바르게 초기화하지 못합니다. 이 문제를 방지하려면 final하위 클래스 선언 을 지정 합니다. 컴파일러가 하위 클래스의 이니셜 라이저를 호출하도록합니다.

final class AccountModel: Account { // add final keyword!
    [...]
    func foo(){
        println("bar")
    }
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

서브 클래 싱 된 LinearLayout 클래스 서브 클래 싱

분류에서Dev

MKOverlayRenderer의 적절한 서브 클래 싱

분류에서Dev

템플릿 서브 클래 싱의 예

분류에서Dev

UITableView 서브 클래 싱

분류에서Dev

서브 클래 싱 버튼

분류에서Dev

UIAlertController 서브 클래 싱

분류에서Dev

UICollectionView 서브 클래 싱

분류에서Dev

SCNNode 서브 클래 싱

분류에서Dev

스토리 보드의 서브 클래 싱

분류에서Dev

수퍼 클래스의 속성을 상속하기 위해 Python 클래스를 서브 클래 싱

분류에서Dev

Swift에서 SpriteKit 클래스 서브 클래 싱

분류에서Dev

제네릭 클래스 및 서브 클래 싱 배열

분류에서Dev

개인 생성자로 클래스 서브 클래 싱

분류에서Dev

파이썬 클래스 속성과 서브 클래 싱

분류에서Dev

서브 클래 싱 vs 확장 vs 내부 클래스

분류에서Dev

Swift : tableview에서 SlackTextViewController 서브 클래 싱

분류에서Dev

메서드 서브 클래 싱 및 재정의

분류에서Dev

서브 클래 싱 된 QGraphicsRectItem 객체의 메서드에 액세스

분류에서Dev

클래스를 서브 클래 싱하여 Kotlin에서 유형 매개 변수의 변형 변경

분류에서Dev

SKSpriteNode의 적절한 서브 클래 싱 및 인스턴스 초기화

분류에서Dev

std :: chrono :: duration 서브 클래 싱

분류에서Dev

RxSwift 서브 클래 싱 모범 사례

분류에서Dev

UIPickerView 서브 클래 싱 및 UIToolbar 추가

분류에서Dev

NSCoder 서브 클래 싱, NSArchiver 재생성

분류에서Dev

파이썬 서브 클래 싱 목록

분류에서Dev

DRY-WPF 창 서브 클래 싱

분류에서Dev

서브 클래 싱 및 제네릭

분류에서Dev

InputStream 및 OutputStream 모두 서브 클래 싱

분류에서Dev

Xamarin Forms-MultiPage 서브 클래 싱

Related 관련 기사

뜨겁다태그

보관